1%/IT์์
JVM์ด GC(Gavage Collection)์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ
Boris
2025. 3. 24. 23:24
๐น GC๋ฅผ ํตํด JVM์ด ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ถ์ํ์ฌ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ ๋ฆฌํ๋ ๋ฐฉ์
[ JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ]
1. Heap ์์ญ
- GC๊ฐ ์ฃผ๋ก ์ํ๋๋ ์์ญ
- ๊ฐ์ฒด์ ์ธ์คํด์ค ๋ณ์๊ฐ ์ ์ฅ๋จ
- Young/Old Generation์ผ๋ก ๋๋จ
2. Stack ์์ญ
- GC์ ๋์์ด ์๋ (๋ฉ์๋ ์คํ์ด ๋๋๋ฉด ์๋ ์ ๋ฆฌ)
- ๋ฉ์๋ ํธ์ถ ์ ์์ฑ๋๋ ์ง์ญ ๋ณ์ ๋ฐ ์ค๋ ๋๋ณ ์คํ ์ปจํ ์คํธ ์ ์ฅ
3. Method(๋ฉํ๋ฐ์ดํฐ) ์์ญ
- ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ, ์ ์ ๋ณ์, ๋ฐํ์ ์์ ํ์ด ์ ์ฅ๋จ
- Java 8๋ถํฐ๋ Metaspace๋ก ๋ณ๊ฒฝ๋จ
[ Heap์ ์ธ๋ ๊ตฌ์กฐ ]
๐น JVM์ GC๋ ๊ฐ์ฒด์ ์์กด ๊ธฐ๊ฐ์ ๋ฐ๋ผ Young/Old Generation์ผ๋ก ๋๋๋ค.
1. Young Generation (Eden + Survivor S0, S1)
- ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋จ
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ์งง์ ์๋ช ์ ๊ฐ์ง๋ค.
- Minor GC ๋ฐ์ ์ ๋ถํ์ํ ๊ฐ์ฒด๊ฐ ์ ๋ฆฌ ๋จ
- ์ผ์ ๊ธฐ์ค์ ๋๊ธด ๊ฐ์ฒด๋ old Generation์ผ๋ก ์ด๋
2. Old Generation (Tenured)
- Young Generation์ ์ง๋์จ ์ค๋๋ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ค.
- Major GC (Full GC) ๋ฐ์ ์ ์ ๋ฆฌ๋๋ค.
[GC์ ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ]
1. Minor GC (Young Generation GC)
- Eden์์ญ์ด ๊ฐ๋ ์ฐจ๋ฉด ๋ฐ์
- ์ฐธ์กฐ๋๋ ๊ฐ์ฒด๋ Survivor์์ญ์ผ๋ก ์ด๋, ๋๋จธ์ง๋ ์ญ์
- ์ผ์ ํ์(Threshold)๋ฅผ ๋๊ธฐ๋ฉด Old Generation์ผ๋ก ์ด๋
2. Major GC (Old Generation GC, Full GC)
- Old Generation์ ๊ฐ์ฒด๊ฐ ๋ง์์ง ๋ ๋ฐ์
- ์ ์ฒด Heap์ ๋์์ผ๋ก ์ ๋ฆฌํ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์ ์ค๋ค.
- GC๊ฐ ์คํ๋๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ์ถ๋ Stop-The-World(STW)๊ฐ ๋ฐ์ํ ์ ์๋ค.
[GC ์ข ๋ฅ]
- Serial GC : ๋จ์ผ ์ค๋ ๋, ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ
- Parallel GC : ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ํ์ฉํ์ฌ ๋ณ๋ ฌ GC ์ํ
- CMS GC (Concurrent Mark-Swwep GC) : ์ ํ๋ฆฌ์ผ์ด์ ์ค๋จ ์ต์ํ
- G1 GC (Garbage First GC) : Java9 ๊ธฐ๋ณธ GC, ์ฑ๋ฅ ์ต์ ํ
- ZGC & Shenandoah GC : Java11 ์ดํ ๋์ , ์งง์ ์ง์ฐ์๊ฐ
* JConsole์ ํ์ฉํ์ฌ GC๋ฅผ ๋์ผ๋ก ํ์ธํ ์ ์๋ค. (perform GC)