๐JVM
JVM์ Java๋ฅผ ์คํํ๊ธฐ ์ํ ๊ฐ์ ์ปดํจํฐ์ด๋ค. Java๋ OS์ ์ข ์๋์ง ์๋๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, OS์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋ ์ ์๋๋ก ๋์์ฃผ๋ JVM์ด ํ์ํ๋ค.
Java ์์ค์ฝ๋(*.java)๋ CPU๊ฐ ์ธ์ํ์ง ๋ชปํ๋ฏ๋ก ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ ํด์ฃผ์ด์ผ ํ๋ฉฐ, Java Compiler๋ฅผ ํตํด .java๊ฐ .class๋ผ๋ Java bytecode๋ก ๋ณํ๋๊ณ JVM์ ํตํด ์ต์ข ์ ์ผ๋ก ์ด์์ฒด์ ์ ๋ง๋ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋์ด ์คํ๋๋ค. ์ด๋, Java Compiler๋ JDK๋ฅผ ์ค์นํ๋ฉด bin์ ์กด์ฌํ๋ javac.exe๋ฅผ ๋งํ๋ฉฐ javac ๋ช ๋ น์ด๋ฅผ ํตํด .java๋ฅผ .class๋ก ์ปดํ์ผ ํ ์ ์๋ค.
ํน์ง
1. ์ปดํ์ผ๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ณํ
2. ์คํ ๊ธฐ๋ฐ์ ๊ฐ์ ๋จธ์
3. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ Garbage Collection(GC)๋ฅผ ์ํํ๋ค.
๊ตฌ์กฐ
JVM ๊ตฌ์กฐ๋ ํฌ๊ฒ Class Loader, Runtime data areas, Execution Engine, GC๋ก ๊ตฌ๋ถ๋๋ค.
๊ตฌ๋ถ | ์ญํ |
Class Loader | ํด๋์ค ํ์ผ์ Runtime Data Area์ ๋ฉ์๋ ์์ญ์ผ๋ก ๋ถ๋ฌ์ค๋ ์ญํ ์ ํ๋ค. |
Execution Engine | Execution Engine์ .class ํ์ผ๊ณผ ๊ฐ์ Java bytecode๋ค์ ์คํ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ค๋ค. |
GC | ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ ์ค ํ๋๋ก, Heap ์์ญ์ ๋ฐฐ์น๋ ๊ฐ์ฒด๋ค์ ๊ด๋ฆฌํ๋ ๋ชจ๋์ด๋ค. |
Runtime Data Area | ๋ฐํ์์ ํด๋์ค ๋ฐ์ดํฐ์ ๊ฐ์ ๋ฉํ ๋ฐ์ดํฐ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณณ์ด๋ค. |
*Java๋ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์ผ๋ก ๋ชจ๋ ์ค๋ ๋๋ Heap๊ณผ Method Area๋ฅผ ๊ณต์ ํ๋ค.
Garbage Collection
Java๋ Kotlin์ ๊ฒฝ์ฐ์๋ JVM์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์์ ์ ๋ฆฌํด์ค๋ค. JVM์ Heap ์์ญ์ ๋ค์์ 2๊ฐ์ง ์ ์ ๋ฅผ ๋ฐํ์ผ๋ก ์ค๊ณ๋์๋ค.
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค. (Unreachable)
- ์ค๋๋ ๊ฐ์ฒด์์ ์๋ก์ด ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ์์ฃผ ์ ๊ฒ ์กด์ฌํ๋ค.
์ฆ, ๊ฐ์ฒด๋ ๋๋ถ๋ถ ์ผํ์ฑ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ซ๋์ ๋จ์์๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค๋ ๊ฒ์ด๋ค.
*Young ์์ญ(Young Generation)
- ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น(Allocation)๋๋ ์์ญ
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ๊ธ๋ฐฉ Unreachable ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์, ๋ง์ ๊ฐ์ฒด๊ฒ Young Generation์ ์๊ฒผ๋ค๊ฐ ์ฌ๋ผ์ง๋ค.
- Young Generation์ ๋ํ GC๋ฅผ Minor GC๋ผ๊ณ ๋ถ๋ฅธ๋ค.
*Old ์์ญ(Old Generation)
- Young ์์ญ์์ Reachable ์ํ๋ฅผ ์ ์งํ์ฌ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ๋ณต์ฌ๋๋ ์์ญ
- Young ์์ญ๋ณด๋ค ํฌ๊ฒ ํ ๋น๋๋ฉฐ, ์์ญ์ ํฌ๊ธฐ๊ฐ ํฐ ๋งํผ ๊ฐ๋น์ง๋ ์ ๊ฒ ๋ฐ์ํ๋ค.
- Old Generation์ ๋ํ GC๋ฅผ Major GC๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Card ํ ์ด๋ธ์๋ Old ์์ญ์ ์๋ ๊ฐ์ฒด๊ฐ Young ์์ญ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋๋ง๋ค ๊ทธ์ ๋ํ ์ ๋ณด๊ฐ ํ์๋๋ค. ์นด๋ ํ ์ด๋ธ์ด ๋์ ๋ ์ด์ ๋ ๊ฐ๋จํ๋ค. Young ์์ญ์์ ๊ฐ๋น์ง ์ปฌ๋ ์ (Minor GC)๊ฐ ์คํ๋ ๋ Old ์์ญ์ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํ์ฌ Young ์์ญ์ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ ๊ฒ์ด ๋นํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์นด๋น์ง ์ปฌ๋ ์ ์ด ์งํํ ๋ ์นด๋ ํ ์ด๋ธ๋ง ์กฐํํ์ฌ GC์ ๋์์ธ์ง ์๋ณํ ์ ์๋๋ก ํ๊ณ ์๋ค.
Minor GC ๋์ ๋ฐฉ์
Young ์์ญ์ 1๊ฐ์ Eden ์์ญ๊ณผ 2๊ฐ์ Survivor ์์ญ, ์ด 3๊ฐ์ง๋ก ๊ตฌ๋ถ๋๋ค.
- Eden ์์ญ: ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น(Allocation)๋๋ ์์ญ
- Survivor ์์ญ: ์ต์ 1๋ฒ์ GC ์ด์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ์์ญ
๊ฐ์ฒด๊ฐ ์๋กญ๊ฒ ์์ฑ๋๋ฉด Young ์์ญ ์ค์์๋ Eden ์์ญ์ ํ ๋น(Allocation)๋๋ค. ๊ทธ๋ฆฌ๊ณ Eden ์์ญ์ด ๊ฝ์ฐจ๋ฉด Minor GC๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ, ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋๊ณ Eden ์์ญ์ ์กด์ฌํ๋ ๊ฐ์ฒด๋ ์ฌ์ฉ์ค์ธ Survivor ์์ญ์ผ๋ก ์ฎ๊ฒจ์ง๊ฒ ๋๋ค. Survivor ์์ญ์ ์ด 2๊ฐ์ด์ง๋ง ๋ฐ๋์ 1๊ฐ์ ์์ญ์๋ง ๋ฐ์ดํฐ๊ฐ ์กด์ฌํด์ผ ํ๋ค.
1) ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ Eden ์์ญ์ ํ ๋น๋๋ค.
2) ๊ฐ์ฒด๊ฐ ๊ณ์ ์์ฑ๋์ด Eden ์์ญ์ด ๊ฝ์ฐจ๊ฒ ๋๊ณ Minor GC๊ฐ ์คํ๋๋ค.
2-1) Eden ์์ญ์์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ค.
2-2) Eden ์์ญ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ 1๊ฐ์ Survivor ์์ญ์ผ๋ก ์ด๋๋๋ค.
3) 1~2๋ฒ์ ๊ณผ์ ์ด ๋ฐ๋ณต๋๋ค๊ฐ Survivor ์์ญ์ด ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด Survivor ์์ญ์ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ Survivor ์์ญ์ผ๋ก ์ด๋์ํจ๋ค.(1๊ฐ์ Survivor ์์ญ์ ๋ฐ๋์ ๋น ์ํ๊ฐ ๋๋ค.)
4)์ด๋ฌํ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ๊ณ์ํด์ ์ด์๋จ์ ๊ฐ์ฒด๋ Old ์์ญ์ผ๋ก ์ด๋(Promotion)๋๋ค
Major GC ๋์ ๋ฐฉ์
Young ์์ญ์์ ์ค๋ ์ด์๋จ์ ๊ฐ์ฒด๋ Old ์์ญ์ผ๋ก Promotion๋๋ค. ๊ทธ๋ฆฌ๊ณ Major GC๋ ๊ฐ์ฒด๋ค์ด ๊ณ์ Promotion๋์ด Old ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ๋ฐ์ํ๊ฒ ๋๋ค. Young ์์ญ์ ์ผ๋ฐ์ ์ผ๋ก Old ์์ญ๋ณด๋ค ํฌ๊ธฐ๊ฒ ์๊ธฐ ๋๋ฌธ์ GC๊ฐ ๋ณดํต 0.5์ด์์ 1์ด ์ฌ์ด์ ๋๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Minor GC๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ฒ ์ํฅ์ ์ฃผ์ง ์๋๋ค. ํ์ง๋ง Old ์์ญ์ Young ์์ญ๋ณด๋ค ํฌ๋ฉฐ Young ์์ญ์ ์ฐธ์กฐํ ์๋ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Major GC๋ ์ผ๋ฐ์ ์ผ๋ก Minor GC๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฌ๋ฉฐ, 10๋ฐฐ ์ด์์ ์๊ฐ์ ์ฌ์ฉํ๋ค.
์ฐธ๊ณ
https://mangkyu.tistory.com/118
'๊ธฐํ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA(2) (0) | 2024.01.28 |
---|---|
JAVA(1) (0) | 2024.01.20 |
[๋์์ธํจํด]Iterator Pattern (0) | 2021.12.02 |
[Design Pattern]Adapter Pattern (0) | 2021.11.16 |
[Design Pattern]Command Pattern (0) | 2021.11.16 |