์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ํ์ด์ฌ
- springboot
- Vue.js
- ์คํ๋ง
- H2 ์ค์น
- Codeup
- ๊ฐ์ฌ์ค
- golang
- GitHub
- ํด๋ฆฐ์ฝ๋
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- ๋กฌ๋ณต
- java
- Git
- go
- mariadb
- Python
- JPA
- ์ค๋ธ์
- ๊ธฐ์ด100์
- ์ฝ๋์
- Spring
- ํด๋ฆฐ ์ฝ๋
- Postman
- spring security
- Spring Boot
- thymeleaf
- Gradle
- ์๊ณ ๋ฆฌ์ฆ
- MySQL
- Today
- Total
nyximos.log
[JAVA] JVM์ ๋ฌด์์ด๋ฉฐ ์๋ฐ ์ฝ๋๋ ์ด๋ป๊ฒ ์คํํ๋ ๊ฒ์ธ๊ฐ ๋ณธ๋ฌธ
[JAVA] JVM์ ๋ฌด์์ด๋ฉฐ ์๋ฐ ์ฝ๋๋ ์ด๋ป๊ฒ ์คํํ๋ ๊ฒ์ธ๊ฐ
nyximos 2022. 1. 8. 23:54๐ฉ๐ ๋ชฉํ
์๋ฐ ์์ค ํ์ผ(.java)์ JVM์ผ๋ก ์คํํ๋ ๊ณผ์ ์ดํดํ๊ธฐ
๐ฉ๐ป ํ์ตํ ๊ฒ
- JVM์ด๋ ๋ฌด์์ธ๊ฐ
- JVM ๊ตฌ์ฑ ์์
- ์ปดํ์ผ ํ๋ ๋ฐฉ๋ฒ
- ์คํํ๋ ๋ฐฉ๋ฒ
- ๋ฐ์ดํธ์ฝ๋๋ ๋ฌด์์ธ๊ฐ
- JIT ์ปดํ์ผ๋ฌ๋ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋์ํ๋์ง
- JDK์ JRE์ ์ฐจ์ด
๐ค JVM์ด๋?
Java virtual machine
์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํ ๊ฐ์ ๊ธฐ๊ณ(์ปดํจํฐ)
๐ค ์ธ๊ตญ์์๋ ์ปดํจํฐ๋ฅผ ๋จธ์ ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค๊ณ ํ๋ค~
์๋ฐ๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ JVM์์๋ง ์คํ๋๋ค.
์๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ JVMํ๊ณ ๋ง ํต์ ํ๊ณ
JVM์ด ์๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ผ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ช ๋ น์ ์ด์์ฒด์ ๊ฐ ์ดํดํ ์ ์๊ฒ ๋ณํํด์ ์ ๋ฌํ๋ค.
์ต๊ทผ์๋ Scala, Kotlin, Groovy ๋ฑ ์ฌ๋ฌ ์ธ์ด๋ค์ด JVM์ ์ด์ฉํ๊ณ ์๋ค.
์ค๋ฅธ์ชฝ๊ทธ๋ฆผ์ฒ๋ผ ์ผ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋๊ฐ OS๋ง ๊ฑฐ์น๊ณ ํ๋์จ์ด๋ก ์ ๋ฌ๋๋ค.
๋ฐ๋ผ์ OS์ ์ข ์์ ์ด๋ค.
→ ์ ํ๋ฆฌ์ผ์ด์ ์ OS์ ๋ง๊ฒ ๋ณ๊ฒฝํด์ผ ํจ!!
Java ์ ํ๋ฆฌ์ผ์ด์ ์ JVM์ ํ๋ฒ ๋ ๊ฑฐ์ณ์ OS์ ๋ฐ๋ผ ํด์ํด์ค๋ค.
๋๋ถ์ Java ์ ํ๋ฆฌ์ผ์ด์ ์ OS๊ฐ ๋ฐ๋์ด๋ ์คํํ ์ ์๋ค.
๊ทธ๋ฌ๋ JVM์ OS์ ์ข ์์ ์ด๋ค.
์ด์์ฒด์ ์ ๋ง๋ JVM์ ์ค์นํด์ผ ํ๋ค.
๐ ๊ฐ์ ๊ธฐ๊ณ virtual machine
์ํํธ์จ์ด๋ก ๊ตฌํ๋ ํ๋์จ์ด
์ปดํจํฐ์ ์ฑ๋ฅ ํฅ์์ผ๋ก ์ธํด ๋ ๋ง์ ํ๋์จ์ด๋ค์ด ์ํํธ์จ์ดํ๋๊ณ ์๋ค.
ex) ์๋์ฐ ๋ฏธ๋์ด ํ๋ ์ด์ด(TV์ ๋น๋์ค), ์์ฐํ(์ค๋์ค)
๐ง JVM ๊ตฌ์ฑ ์์
JVM์ ๊ตฌ์ฑ์์๋ ํฌ๊ฒ 3๊ฐ์ง๋ก ๋๋์ ์๋ค.
- Class Loader
- Runtime Data Area
- Execution Engine
JVM์ด ์คํ๋๋ฉด OS๊ฐ JVM์๊ฒ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด ์ค๋ค.
๐ Class Loader
์คํ์์ (Runtime)์ Class ํ์ผ(์ปดํ์ผํ ๋ฐ์ดํธ์ฝ๋)์ ๋ก๋ํ๊ณ , ๋ฉ๋ชจ๋ฆฌ(Runtime Data Area)์ ๋งํฌ๋ฅผ ๋ฐฐ์นํ๋ ์์ ์ ์ํํ๋ ๋ชจ๋์ด๋ค.
- ๋ก๋ฉ
1) ํด๋์ค ๋ก๋๊ฐ .class ํ์ผ์ ์ฝ๊ณ
2) ๋ด์ฉ์ ๋ฐ๋ผ ์ ์ ํ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ฌ → Method ์์ญ์ ์ ์ฅ
* Method ์์ญ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ
: Type์ ๋ณด(class, interface, enum), ๋ฉ์๋, ๋ณ์,
FQCN (Fully Qualified Class Name : ํด๋์ค๊ฐ ์ํ ํจํค์ง๋ช ์ ๋ชจ๋ ํฌํจํ ์ด๋ฆ))
3) ๋ก๋ฉ ํ Class ํ์ ์ Class ๊ฐ์ฒด ์์ฑ → Heap ์์ญ์ ์ ์ฅ - ๋งํฌ : Verify, Prepare, Resolve ์ธ๋จ๊ณ๋ก ๋๋ ์ง
1) Verify : .class ํ์ผ ํ์ ์ ํจํ์ง ์ฒดํฌ → ์ ํจํ์ง ์์์ JVM ์๋ฌ
2) Prepare : ํด๋์ค๋ณ์(static ๋ณ์)์ ๊ธฐ๋ณธ๊ฐ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ์ค๋น
3) Resolve : ์ฌ๋ณผ๋ฆญ ๋ฉ๋ชจ๋ฆฌ ๋ ํผ๋ฐ์ค๋ฅผ ๋ฉ์๋ ์์ญ์ ์๋ ์ค์ ๋ ํผ๋ฐ์ค๋ก ๊ต์ฒด(Optional)
new Person()์์ ์ค์ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ๋ฆฌํค์ง ์๋๋ค.public class Application{ Person nyximos = new Person(); ... }
Resolve ๋จ๊ณ์์ ์ค์ ํ์ ๋ค์ด์๋ ์ธ์คํด์ค๋ก ๊ฐ๋ฆฌํค๋๋ก ๊ต์ฒดํ๋ค. - ์ด๊ธฐํ : ์ค๋น๋ ๋ฉ๋ชจ๋ฆฌ์ static ๋ณ์์ ๊ฐ ํ ๋น, static ๋ธ๋ญ์ด ์๋ค๋ฉด ์คํ
๐ Runtime Data Area
Runtime Data Area๋ 5๊ฐ์ ์์ญ์ผ๋ก ๊ด๋ฆฌํ๋ค.
Method Area์ Heap Area๋ ๋ชจ๋ Thread๊ฐ ๊ณต์ ํ๊ณ ,
Stack Area, PC Register, Native Method Stack์ Thread ๋ณ๋ก ํ๋์ฉ ์กด์ฌํ๋ค.
- Method Area (Class Area)
- Stack Area
- Heap Area
- Program Counter Registers
- Native Internal Threads
1. Method Area (Class Area)
ํ๋ก๊ทธ๋จ ์คํ์ค ํด๋์ค ์ฌ์ฉ → ํด๋์ค ํ์ผ์ ์ฝ๊ณ ๋ถ์ํ์ฌ ํด๋์ค ์ฝ๋์ ๋ํ ์ ๋ณด๋ค์ Method Area์ ์ ์ฅ
์ ์ฅ๋๋ ์ ๋ณด
- Type Information (Type : ํด๋์ค์ ์ธํฐํ์ด์ค ๋ชจ๋ ํต์นญ)
- Runtime Constant Pool (Type์ ๋ชจ๋ ์์ ์ ๋ณด)
- Field information (Field๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ๊ฐ๋ฅดํด)
- Method Information (Constructor๋ฅผ ํฌํจํ ๋ชจ๋ ๋ฉ์๋)
- Class Variable (static ํค์๋๋ก ์ ์ธ๋ ๋ณ์)
1) ๋ชจ๋ ์ธ์คํด์ค์ ๊ณต์ ๋๋ฉฐ ์ธ์คํด์ค๊ฐ ์์ด๋ ์ง์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
2) ์ด ๋ณ์๋ ์ธ์คํด์ค์ ๊ฒ์ด ์๋๋ผ ํด๋์ค์ ์ํ๊ฒ ๋๋ค.
3) ํด๋์ค๋ฅผ ์ฌ์ฉ ํ๊ธฐ ์ด์ ์ ์ด ๋ณ์๋ค์ ๋ฏธ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์ ์๋ ์ํ๊ฐ ๋๋ค.
4) final class ๋ณ์๋ ์์๋ก ์นํ ๋์ด Runtime Constant Pool์ ๊ฐ์ ๋ณต์ฌํ๋ค.
static ๋ณ์๋ Method Area์ Class Variable์ ์ ์ฅ
๊ธฐ๋ณธํ์ด ์๋ static ํด๋์คํ ๋ณ์๋ ๋ ํผ๋ฐ์ค ๋ณ์๋ง ์ ์ฅ๋๊ณ ์ค์ ์ธ์คํด์ค๋ Heap์ ์ ์ฅ๋์ด ์๋ค.
๊ทธ ํ ์ด ์ธ์คํด์ค์ ๋ณ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด Heap์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ๋ณด๊ฐ ๋๊ณ
Heap์ ์ธ์คํด์ค๊ฐ Method Area์ ์ด๋ ํด๋์ค ์ ๋ณด์ ์ฐ๊ฒฐ๋๋์ง ์ค์ ํ๊ฒ ๋๋ค.
- Minhyeok Jung๋ ๋ธ๋ก๊ทธ
ํด๋์ค ๋ก๋ฉ์ ์ํ JVM์ ๋ก๋ฉ ์ ์ฐจ
1. ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฌธ์ฅ์ ๋ง๋ฌ๋๋ฐ ๊ทธ ๋ฉ์๋๋ฅผ ๊ฐ์ง ํด๋์ค ๋ฐ์ดํธ๊ฐ ์์ง ๋ก๋ฉ๋ ์ ์ด ์๋ค๋ฉด?
→ JRE ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์์ ํด๋์ค ์ฐพ์
2. ์์ผ๋ฉด CLASSPATH ํ๊ฒฝ๋ณ์์ ์ง์ ๋ ํด๋์์ ํด๋์ค ์ฐพ์
3. ์ฐพ์ผ๋ฉด ๊ทธ ํด๋์ค ํ์ผ์ด ์ฌ๋ฐ๋ฅธ์ง ๋ฐ์ดํธ์ฝ๋ ๊ฒ์ฆ
4. ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํธ์ฝ๋๋ฉด ๋ฉ์๋ ์์ญ์ผ๋ก ํ์ผ์ ๋ก๋ฉ
5. ํด๋์ค ๋ณ์๋ฅผ ๋ง๋ค๋ผ๋ ๋ช ๋ น์ด๊ฐ ์์ผ๋ฉด Method Area์ ๋ณ์ ์ค๋น
6. ํด๋์ค ๋ธ๋ก์ด ์์ผ๋ฉด ์์๋๋ก ๋ธ๋ก ์ค๋น
์ด๋ ๊ฒ ํด๋์ค์ ๋ฐ์ดํธ์ฝ๋๊ฐ ๋ก๋ฉ๋๋ฉด JVM์ด ์ข ๋ฃ๋ ๋๊น์ง ์ ์ง๋๋ค.
- WANZA๋ ๋ธ๋ก๊ทธ
2. Stack Area (JVM Stack)
Thread ์ ์ด๋ฅผ ์ํด ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
Thread๊ฐ ์์ฑ๋ ๋๋ง๋ค ํ๋์ฉ ์์ฑ๋๋ค.
๊ธฐ๋ณธ ์๋ฃํ์ ํด๋น๋๋ ์ง์ญ๋ณ์์ ๋ฐ์ดํฐ ๊ฐ์ด ์ ์ฅ๋๋ ๊ณต๊ฐ
๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ ์ข ๋ฃ๋๋ฉด ํด์ ๋จ
๋ณ์์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ํ ๋น๋๋ฉด ์ด์ ๋ฐ์ดํฐ๊ฐ ์ง์์ง๋ค.
- Method๊ฐ ํธ์ถ
→ Method์ Method ์ ๋ณด๋ Stack์ ์์
→ Method ํธ์ถ ์ข ๋ฃ๋ ๋ Stack point์์ ์ ๊ฑฐ - Method ์ ๋ณด
๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ์์๋ณ์, address(๋ฉ์๋๊ฐ ํธ์ถํ ์ฃผ์) ๋ฑ
๋ฉํฐ Thread ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ๊ฐ Thread๊ฐ ์์ ์ Stack์ ๊ฐ์ง๊ณ ๋ ์์ง๋ง Heap ์์ญ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์,
ํ๋ก๊ทธ๋๋ฐ์์ Thread-safe ํ์ง ์๋ ์ด์์ ์ฃผ์ํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ์ ํด์ผ ํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก Heap ์์ญ ์์ฒด๊ฐ Thread-safe ํ์ง ์๋ ์ํ์ด๋ค.
Thread-safe ํ๊ฒ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ Immutableํ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ๋ ๊ฒ์ด ์ข๋ค.
- Minhyeok Jung๋์ ๋ธ๋ก๊ทธ
3. Heap Area
์ฌ์ฉ์๊ฐ ๊ด๋ฆฌํ๋ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ณต๊ฐ
๊ฐ์ฒด๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ฉด ์ธ์คํด์ค๊ฐ Heap ์์ญ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ด ์ฌ์ฉ๋จ
ํ๋ก๊ทธ๋จ์ ์์ํ ๋ ๋ฏธ๋ฆฌ Heap ์์ญ์ ๋ง์ด ํ ๋นํ๊ณ ์ธ์คํด์ค์ ์ธ์คํด์ค ๋ณ์๊ฐ ์ ์ฅ๋๋ค.
Stack Area๊ณผ ๋ฌ๋ฆฌ Heap Area์์ ๋ณด๊ด๋๋ ๋ฉ๋ชจ๋ฆฌ๋
๋ฉ์๋ ํธ์ถ์ด ๋๋๋ GC์ ์ํด ์ ๊ฑฐ๋๊ฑฐ๋ JVM์ด ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง ์ฌ๋ผ์ง์ง ์๋๋ค.
๐ฃ A a = new A(); ํ๋ฉด ์ธ์คํด์ค๊ฐ ํ์ ์ ์ฅ๋จ
Heap Area์ ์ค์ ๊ฐ, ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๊ณ new ์ฐ์ฐ์๋ฅผ ํตํด ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ฐธ์กฐ ๊ฐ, ์ฃผ์๊ฐ ๋ฆฌํด๋์ด Stack์ ์ ์ฅ !!!!
์ฐธ์กฐํ(Reference Type)์ ๋ฐ์ดํฐ ํ์
์ ๊ฐ๋ ๊ฐ์ฒด(์ธ์คํด์ค), ๋ฐฐ์ด ๋ฑ์ Heap ์์ญ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
์ด๋ ๋ณ์(๊ฐ์ฒด, ๊ฐ์ฒด๋ณ์, ์ฐธ์กฐ๋ณ์)๋ Stack ์์ญ์ ๊ณต๊ฐ์์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ Heap ์์ญ์ ์ฐธ์กฐ๊ฐ(reference value, ํด์์ฝ๋ / ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฐ)์ new ์ฐ์ฐ์๋ฅผ ํตํด ๋ฆฌํด ๋ฐ๋๋ค.
๋ค์ ๋งํ๋ฉด ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋ Heap ์์ญ์ ์ฐธ์กฐ ๊ฐ์ Stack ์์ญ์ ๊ฐ์ฒด๊ฐ ๊ฐ๊ณ ์๋ค.
์ด๋ ๊ฒ ๋ฆฌํด ๋ฐ์ ์ฐธ์กฐ ๊ฐ์ ๊ฐ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ํตํด์๋ง ํด๋น ์ธ์คํด์ค๋ฅผ ํธ๋ค ํ ์ ์๋ค.
-JOKER๋ ๋ธ๋ก๊ทธ
4. Program Counter Registers
Thread๊ฐ ์์ฑ๋ ๋๋ง๋ค ์๊ธฐ๋ ๊ณต๊ฐ
Thread๊ฐ ์ด๋ค ๋ช ๋ น์ ์คํํ ์ง ๊ธฐ๋กํ๋ค.
CPU๋ด์ ๊ธฐ์ต์ฅ์น์ธ ๋ ์ง์คํฐ์๋ ๋ค๋ฅด๊ฒ ์๋ํ๋ค. → Register-base ๐ โ๏ธ Stack-base ๐โ๏ธ
5. Native Method Stacks
์๋ฐ ์ด์ธ์ ์ธ์ด์์ ์ ๊ณต๋๋ Method์ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
(C, C++, ์ด์ ๋ธ๋ฆฌ๋ก ์์ฑ๋ Native ํค์๋๋ฅผ ์ฌ์ฉํ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ ๊ณต)
JNI(Java Native Interface)๋ฅผ ํตํด ํ์ค์ ๊ฐ๊น์ด ๋ฐฉ์์ผ๋ก ๊ตฌํ ๊ฐ๋ฅ
๐ Excution Engine
Runtime Data Area์ ํ ๋น๋ ByteCode๋ฅผ ์คํ
CPU๋ Java Bytecode๋ฅผ ๋ฐ๋ก ์คํ ์ํฌ ์ ์๋ค.
๊ทธ๋์ Execution Engine๊ฐ ๊ธฐ๊ณ์ด๋ก ๋ณํํ์ฌ ์คํํ๋ค.
Excution Engine์ Interpreter์ JIT Compiler๋ก ๊ตฌ์ฑ๋๋ค.
1. Interpreter
Java class ํ์ผ์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ํ์ค์ฉ ์ฝ์ด์ native code(๊ธฐ๊ณ์ด)๋ก ๋ณํํ์ฌ ์คํํ๋ค.
๋ฐ๋ณต ํธ์ถ๋๋ ๋ฉ์๋๋ฅผ ๋งค๋ฒ ์ธํฐํ๋ฆฌํ ํ์ฌ ๋นํจ์จ์ ์ด๋ค.
2. JIT Compiler
Interpreter์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด ์์ฃผ ์คํ๋๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์บ์ฑํ์ฌ ๋งค๋ฒ ํธ์ถํ์ง ์๊ณ ํ๋ฒ์ ์ปดํ์ผํ๋ค.
๋ฐ๋ณต ํธ์ถ๋๋ ๋ฉ์๋๋ JIT Compiler์ ์ํด ๊ธฐ๊ณ์ด๋ก ๋ณํ๋์ด Native Stack์ ์ ์ฅ๋๋ค.
3. Garbage Collector
Runtime Data Area์ Heap Area์ ์์ฑ๋ ๊ฐ์ฒด๋ค ์ค ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ค์ ํ์ํ ์ ๊ฑฐํด์ค๋ค.
C๋ C++์ ๊ฒฝ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น/์ฌ์ฉ ํ ๋ฐํํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ์ฐจ์งํ์ฌ ๋ญ๋นํ๊ฒ ๋์ง๋ง,
JAVA์ ๊ฒฝ์ฐ Garbage Collector๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ด๋ฆฌ, ์ต์ ํ ํด์ค๋ค.
Garbage Collector ๋์ ์ JVM ์คํ์ด ๋ฉ์ถ๊ฒ ๋๊ณ ์ด๋ฅผ Stop The World๋ผ๊ณ ํํํ๋ค.
JAVA ๊ฐ๋ฐ์๋ ์ด ์๊ฐ์ ์ค์ด๊ธฐ ์ํด Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ ๋์์ ๊ดํ ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํด์ผํ๋ค.
Stop The World๋ฅผ ํตํด ๋ชจ๋ ์ค๋ ๋ ์์ ์ ์ค๋จ์ํค๋ฉด GC๋ ๋์ ๊ฐ์ฒด์ ๋ํ ํ์์ ์ํํ๋ค.
๊ฐ์ฒด๊ฐ ์ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๋ ๊ณผ์ ์ Mark ๊ณผ์ ์ด๋ผ๊ณ ํ๋๋ฐ,
Mark๊ณผ์ ์ด ๋์ง ์์๋ค๋ ๊ฑด ๊ฐ์ฒด๊ฐ ์ ์ ํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ ๋ง์ด๋ฏ๋ก ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ค.
๐ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ
1. ๋์ถฉ JDK๋ฅผ ์ค์นํ์
2. ์์ค ํ๋ก๊ทธ๋จ์ ์์ฑํ์
์ ์ฅํ ๋ ๊ผญ ์์คํ์ผ์ ํ์ฅ์๋ฅผ .java ๋ก ํด์ค์ผ๋๋ค.
public class Hello {
public static void main(String args[]){
System.out.println("Hello World!");
}
}
3. CMD๋ฅผ ์ผ์ Hello.java๋ฅผ ์ปดํ์ผํ์
์ปดํ์ผ๋ฌ์ ๋ช
๋ น์ด ๋ฒ์ ์ด๋ฆ์ javac์ด๋ค.
์ปดํ์ผ๋ฌ๊ฐ ํด๋์คํ์ผ์ ์์ฑํด์ค๋ค.
4. ํด๋์ค ํ์ผ์ด ์์ฑ๋๋์ง ํ์ธํด๋ณด์
Hello.java ์๊น ! (๋ฐ์ดํธ์ฝ๋๋ก JVM์ด ํด์ํ ์ ์๋ ์ธ์ด์ด๋ค.)
5. ์คํํด๋ณด์
๊ฐ์ ๊ธฐ๊ณ์ธ java๋ฅผ ์ด์ฉํ์ฌ ํด๋์ค ํ์ผ ์คํ
๐ค ๋ฐ์ดํธ์ฝ๋๋?
๋ฐ์ดํธ ์ฝ๋ ใดใด ๋ฐ์ดํธ์ฝ๋ ใ ใ
๋ถ์ฌ์ ์จ์ผ๋๋ค๊ณ ํ๋ค. ๊ทผ๋ฐ ์๊พธ ๋์์ฐ๊ธฐ ๋ญ๊ฐ ํ๊ฒ ๋๋ ๊ฒ..
๊ฐ๊ฐ์ ๋ช ๋ น์ด๊ฐ ํ ๋ฐ์ดํธ๋ก ์ด๋ฃจ์ด์ง๊ณ 256๊ฐ์ ๋ช ๋ น์ด๋ฅผ ๋ง๋ค ์ ์๋ค.
์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด ๋ณํ๋๋ ์ฝ๋์ ๋ช ๋ น์ด์ ํฌ๊ธฐ๊ฐ 1byte๋ผ์ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ผ๊ณ ๋ถ๋ฆฐ๋ค๊ณ ํ๋ค.
์๋ฐ๋ OS์ ์ข ์์ ์ด์ง ์๊ธฐ ์ํด์ JVM์ด ์ดํดํ ์ ์๋ ์ธ์ด์ธ ๋ฐ์ดํธ์ฝ๋ ํํ๋ก ์ ๊ณต๋๊ณ
๋ฐ์ดํธ์ฝ๋์ JVM์ด ์์ผ๋ฉด ์ด๋ ์ด์์ฒด์ ์ ์ข ์์ ์ด์ง ์๊ณ ์คํ๋๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
๊ธฐ๊ณ์ด๋ ์๋๋ค.
javap -c Hello.class๋ก ํด์๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค๊ณ ํ๋๋ฐ
๐.. ๋๋ ๋ณด์ฌ๋.
์ค์น๋ ๋์ด์์๋ค.
ํ๊ฒฝ๋ณ์ ์ค์ ์ ๋ค์ ํด์ฃผ์๋๋ ๋๋ค ๐
ํ๊ฒฝ๋ณ์ ์ค์ ์ ๋๋ก ํ๋๋ฐ๋ ๊ณ์ ์๋ผ์ ์ฌ์ต์ฌ์ตํ๊ณ ์์๋๋ฐ
cmd ๋ค์ ์์ผ์ ๊ฒฝ๋ก ์ค์ ์ด ์ ๋๊ฑฐ์๋ค..ใ ๐คฆโ๏ธ
๐ JIT ์ปดํ์ผ๋ฌ๋ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ๋์ํ๋์ง
Just In Time
์ปดํ์ผ๋ฌ๋ก ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํด์ ์คํํ๋ ๊ฒ
javac๋ ๋ค๋ฅด๋ค.
java ์คํํ๋ ์์ ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ์ปดํ์ผ ๊ธฐ๋ฒ
์์ฃผ ์ฌ์ฉํ๋ ์ฝ๋, JIT ์ปดํ์ผ๋ฌ๊ฐ ์ ์ฅํด๋๊ณ ํด์ํ์ง์๊ณ ๋ฐ๋ก ์คํํจ
๋ฐํ์ ์ ํด๋์คํ์ผ(๋ฐ์ดํธ์ฝ๋)๋ฅผ ๋ค์ดํฐ๋ธ ๊ธฐ๊ณ์ด๋ก ํ๋ฐฉ์ ์ปดํ์ผ ํ ์ฌ์ฉํ๋ ๊ฐ๋
๐คจ JDK์ JRE์ ์ฐจ์ด
JDK Java Development Kit ์๋ฐ ๊ฐ๋ฐ ๋๊ตฌ
JRE์ ์ถ๊ฐ๋ก ์ปดํ์ผ๋ฌ ๋๋ฒ๊ฑฐ ๋ฑ ๋ช ๋ น์ดํ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ถ๊ฐํ ๊ฒ
JDK ์์ JRE๊ฐ ํฌํจ๋์ด ์๋ค.
JRE Java Runtime Environment ์๋ฐ ์คํ ํ๊ฒฝ
์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์๋ฐ ๊ฐ์ ๊ธฐ๊ณ, ๊ธฐํ ์ปดํฌ๋ํธ๋ค์ ์ ๊ณต
๋จ์ํ ์คํ๋ง ๐โ๏ธ !!! ๊ฐ๋ฐ์ ์ํ๋ ์ผ๋ฐ์ธ๋ค์ ์ํ ํ๊ฒฝ
์ฐธ์กฐ
1์ฃผ์ฐจ ๊ณผ์ : JVM์ ๋ฌด์์ด๋ฉฐ ์๋ฐ ์ฝ๋๋ ์ด๋ป๊ฒ ์คํํ๋ ๊ฒ์ธ๊ฐ.
๋จ๊ถ์ฑ, ์๋ฐ์ ์ ์ ๊ธฐ์ดํธ, ๋์ฐ์ถํ, 2019
Class Loader - https://medium.com/lucky-sonnie/java-classloader-%EC%97%90-%EB%8C%80%ED%95%B4-f9972c8c4b09
Class Loader - https://goodgid.github.io/Java-Class-Loader/
Runtime Data Area - https://www.holaxprogramming.com/2013/07/16/java-jvm-runtime-data-area/ (Minhyeok Jung๋)
Runtime Data Area - https://jithub.tistory.com/40
Method Area - https://blog.wanzargen.me/16 (WANZA๋)
Excution Engine - https://wonit.tistory.com/591
JIT Comiler - https://93jpark.tistory.com/58
์คํ & ํ - https://m.blog.naver.com/heartflow89/220954420688 (JOKER๋)
Garbage Collector - https://junhyunny.github.io/information/java/what-is-jvm/
javac ์ต์ - https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html#options
'Programming > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ํด๋์ค (0) | 2022.08.05 |
---|---|
[Java] ์ ์ด๋ฌธ (0) | 2022.08.04 |
[Java] ์ฐ์ฐ์ (0) | 2022.02.02 |
[Java] ์๋ฐ ๋ฐ์ดํฐ ํ์ , ๋ณ์ ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด (0) | 2022.01.14 |
[JAVA] ์๋ฐ๋? (0) | 2022.01.06 |