๐ ๋ชฉ์ฐจ
- JVM์ด ํ๋ ์ผ ๊ฐ์
- JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- Method Area
- Heap
- Stack
- PC Register
- Native Method Stack
- Heap ๋ด๋ถ ๊ตฌ์กฐ
- Young / Old Generation
- GC(Garbage Collector) ๋์ ๋ฐฉ์
- Young GC / Full GC
- ์ GC ํ๋์ด ํ์ํ๊ฐ
- ๋ํ JVM ์ต์ ์์
๐ 1. JVM์ด ํ๋ ์ผ ๊ฐ์
Java ์ฝ๋๋ ์คํ ์ JVM(Java Virtual Machine)์ด ๋ค์์ ์ํํ๋ค:
โ ๋ฐ์ดํธ์ฝ๋ ๋ก๋ฉ(ClassLoader)
โ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
โ ์ค๋ ๋ ๊ด๋ฆฌ
โ GC(Garbage Collection)
์ด ๊ณผ์ ์์ JVM์ ์๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ค.
๐ 2. JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
JVM ๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ ์๋ 5๊ฐ ์์ญ์ผ๋ก ๋๋๋ค
| ์์ญ | ์ญํ | ์์ |
| Method Area | ํด๋์ค ์ ๋ณด (static, ๋ฉ์๋ ์ฝ๋) ์ ์ฅ | static ๋ฉ์๋, ํด๋์ค ๋ก๋ฉ ์ ๋ณด |
| Heap | new๋ก ์์ฑ๋ ๊ฐ์ฒด ์ ์ฅ, GC ๊ด๋ฆฌ ๋์ | new JSONObject() |
| Stack | ์ค๋ ๋๋ณ ํจ์ ํธ์ถ ์ ๋ณด (์ง์ญ ๋ณ์, ๋งค๊ฐ๋ณ์ ๋ฑ) | int count, parser |
| PC Register | ํ์ฌ ์ค๋ ๋๊ฐ ์คํ ์ค์ธ ๋ช ๋ น ์์น | |
| Native Method Stack | JNI ๊ฐ์ native ์ฝ๋ ์คํ์ฉ |
โ 2-1. Method Area (or ํด๋์ค ์์ญ)
- ํด๋์ค ์ ๋ณด ์ ์ฅ: ํ๋, ๋ฉ์๋, static ๋ณ์
- ๋ชจ๋ ์ค๋ ๋๊ฐ ๊ณต์
- ํด๋์ค ๋ก๋์ ์ํด ํด๋์ค ํ์ผ์ด ๋ก๋๋๊ณ ํ์ฑ๋์ด ๋ฉ์๋ ์์ญ์ ์ ์ฅ๋จ.
โ 2-1-1. Constant Pool (์์ ํ)
- ํด๋์ค ํ์ผ ๋ด๋ถ์ ์์นํ ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- ๋ฆฌํฐ๋ด ๊ฐ(๋ฌธ์์ด, ์ ์, ๋ถ๋ ์์์ ๋ฑ) ์ ์ฅ
- ์ค๋ณต ์ ์ฅ ์์
- ๋ถ๋ณ(Immutable)
- JVM ์คํ ์ค ์ฌ์ฌ์ฉ → ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
โ 2-2. Heap (ํ)
- ๊ฐ์ฒด๋ค์ด ๋์ ์ผ๋ก ํ ๋น๋๋ ๊ณต๊ฐ, ์ธ์คํด์ค ๋ณ์์ ๊ฐ์ฒด๋ค์ด ์ ์ฅ๋ฉ๋๋ค.
- new๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ์์ญ
- JVM ์คํ ์ค์ ๋์ ์ผ๋ก ํ ๋น๋๊ณ ํด์
- ๊ฐ์ฒด์ ํฌ๊ธฐ๋ ์๋ช ์ ๋ฐํ์์ ๊ฒฐ์ ๋จ
- GC๋ ์ด ์์ญ๋ง ์๊ฑฐ (๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด ์๋ ํด์ )
โ 2-3. Stack (์คํ)
- ์ค๋ ๋๋ง๋ค ๋ณ๋ ํ ๋น, ๋ฉ์๋ ํธ์ถ(์คํ ์์)๊ณผ ์ง์ญ ๋ณ์๋ค์ ์ ์ฅ.
- ๋ฉ์๋ ํธ์ถ ์ Frame ์์ฑ
- ๋ฉ์๋ ์ข ๋ฃ ์ ์๋ ํด์
๋ฉ์๋ ์์ญ, ํ ์์ญ, ์คํ ์์ญ์ ์๋ฐ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ๋ค์ด๊ณ ,
Native Method Stack Area์ PC Register๋ ์ด๋ค๊ณผ๋ ๋ค๋ฅธ ๋ชฉ์ ๊ณผ ์ญํ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
โ 2-4. Native Method Stack Area
- ๋ค์ดํฐ๋ธ ๋ฉ์๋ ํธ์ถ (JNI/C/C++ ์ฝ๋ ์คํ์ฉ) ์ ์์ฑ ๋ฐ ์คํ์ ๋ณด ์ ์ฅ๋จ.
- *Native Method: ์๋ฐ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๊ฐ ์๋, ๋ค์ดํฐ๋ธ ์ธ์ด(C, C++ ๋ฑ)๋ก ์์ฑ๋ ์ฝ๋.
โ 2-5. PC Register (Program Counter Register)
- ํ์ฌ ์คํ ์ค์ธ ์ค๋ ๋์ ๋ช ๋ น์ด ์ฃผ์(Instruction Pointer)๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ
- ์ค๋ ๋๋ง๋ค 1๊ฐ์ฉ ์กด์ฌ
- ๋ช ๋ น์ด ์ฃผ์๋ ๋ค์์ ์คํ๋ ๋ช ๋ น์ด ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด.
- ์ค๋ ๋๊ฐ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด PC Register์ ํธ์ถ๋ ๋ฉ์๋์ ์์ ์ฃผ์๊ฐ ์ ์ฅ๋๊ณ , ํด๋น ๋ฉ์๋์ ์คํ์ด ์ข ๋ฃ๋๋ฉด ๋ค์ ์ด์ ๋ช ๋ น์ด ์ฃผ์๋ก ๋ณต์.
- JVM์ด ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๊ณ ์ค๋ ๋ ์ค์์นญ์ ์ํํ๋๋ฐ ์ฌ์ฉ.
๐ 3. Heap ๋ด๋ถ ๊ตฌ์กฐ (Generation)
Heap์ GC ํจ์จ์ ์ํด Generation ๊ตฌ์กฐ๋ก ๋ถ๋ฆฌ๋๋ค.
[ Young Generation ]
โ Eden ← ์ ๊ฐ์ฒด๊ฐ ์ฒ์ ๋ค์ด์ค๋ ๊ณต๊ฐ
โ Survivor(S0, S1) ← ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ ์ ๋จธ๋ฌด๋ ๊ณต๊ฐ
[ Old Generation ]
โ ์ค๋ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ด๋ (์ฅ๊ธฐ ๋ณด๊ด)
โ Young Generation
- ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ๋ค์ด์ค๋ ๊ณณ
- ๋๋ถ๋ถ ๊ธ๋ฐฉ ์ฌ๋ผ์ง → ๋น ๋ฅธ ์ ๋ฆฌ ๊ฐ๋ฅ
โ Old Generation
- Young์์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ด๋
- ์ฌ๊ธฐ ์์ด๋ฉด Full GC ๋ฐ์
๐ 4. GC(Garbage Collector) ๋์ ๋ฐฉ์
| ์ฉ์ด | ๋์ | ํน์ง |
| Young GC (Minor GC) | Young๋ง | ๋น ๋ฅด๊ณ ์์ฃผ ๋ฐ์ |
| Old GC (Major/Full GC) | Old ํฌํจ ์ ์ฒด | ๋๋ฆผ, STW ๋ฐ์ |
STW(Stop-The-World)๋ GC ์ค JVM์ด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๋ฉ์ถ๋ ์ํฉ์ ์๋ฏธํ๋ค.
๐ 5. ์ GC ํ๋์ด ํ์ํ๊ฐ?
โ GC๊ฐ ๋๋ฌด ์์ฃผ ๋๋ฉด → ์๋ต ์ง์ฐ, ๋๊น
โ Full GC ์๊ฐ์ด ๋๋ฌด ๊ธธ๋ฉด → ์๋ฒ ๋ค์ด/ํ์์์
โก๏ธ ๊ทธ๋์ ์๋ฒ๋ ์ํฉ์ ๋ง๊ฒ ํ๋ ํ์
โ GC ์๊ณ ๋ฆฌ์ฆ ์ ํ
โ Heap ํฌ๊ธฐ ์กฐ์
โ New/Old ๋น์จ ์ค์
๐ 6. JVM ์ต์ ์์
-XX:+UseG1GC # G1 GC ์ฌ์ฉ (JDK9+ ๊ธฐ๋ณธ)
-Xms512m -Xmx1024m # ์ต์/์ต๋ Heap
-XX:NewRatio=2 # Old:Young ๋น์จ
-XX:+PrintGCDetails # GC ๋ก๊ทธ ์ถ๋ ฅ
| GC ์ข ๋ฅ | ํน์ง | ์ถ์ฒ ์ํฉ |
| Serial GC | ๋จ์ผ ์ค๋ ๋, ๋๋ฆผ | ๋จ์ํ ์ฑ |
| Parallel GC | ๋ฉํฐ์ค๋ ๋, ๋น ๋ฆ | Throughput ์ค์ํ ์๋ฒ |
| CMS | ๋ฉ์ถค ์งง์, Old ์ธ๋ ๋์ ์์ง | ์๋ต ์ง์ฐ ์ค์ด๊ณ ์ถ์ ๋ |
| G1 GC | Heap์ ์์ญํ, Full GC ์ค์ | ๋๋ถ๋ถ ์ํฉ์์ ๋ฌด๋ํจ ๐ (์์ฆ ๊ธฐ๋ณธ๊ฐ) |
'Backend > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [JAVA] ํจํค์ง์ ํด๋์ค (๊ฐ์ ์ด๋ฆ์ ํด๋์ค import) (0) | 2023.07.25 |
|---|---|
| JAVA ๋ฌธ์์ด ๋น๊ต (== ์ฐ์ฐ์์ equals ๋ฉ์๋์ ์ฐจ์ด) (0) | 2023.07.25 |
| Java ๊ฐ์ฒด ํ๋ณํ (mapper.convertValue) (0) | 2023.06.14 |
| [JAVA] ์๋ฐ ์ธ๋ถ ํ์ผ/ ์ธ๋ถ ํ๋ก๊ทธ๋จ/ ๋ช ๋ น์ด ์คํ (exec) (0) | 2023.04.26 |
| JDBC๋ฅผ ์ด์ฉํ DB ์ฐ๊ฒฐ (Connetion ์์ฑ) (0) | 2023.04.24 |