simple JVM GC guide
ยท ์ฝ 4๋ถ
๐ 1. JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ดํดโ
JVM์ ์คํ ์ค ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฌ์ฉํฉ๋๋ค:
- Metaspace (ํด๋์ค ๋ฉํ์ ๋ณด)
- Heap (๊ฐ์ฒด ์ธ์คํด์ค ์ ์ฅ)
- Stack (์ง์ญ ๋ณ์, ํ๋ ์ ๋ฑ)
- Code Cache (JIT ๊ฒฐ๊ณผ ์ ์ฅ)
- Heap: ๋๋ถ๋ถ์
new๊ฐ์ฒด๊ฐ ์ด๊ณณ์ ์์ฑ๋จ - Metaspace: static ํ๋, ํด๋์ค ๊ตฌ์กฐ, ๋ฉ์๋ ์ ๋ณด ๋ฑ ํด๋์ค ๋ก๋ฉ ์ ์ ์ฅ
- Stack: ๊ฐ ์ค๋ ๋๋ง๋ค ์กด์ฌ, ์ง์ญ ๋ณ์ ๋ฐ ํธ์ถ ์ปจํ ์คํธ ์ ์ฅ
โป๏ธ 2. GC(Garbage Collection) ๊ธฐ๋ณธ ์ฒ๋ฆฌ ๋จ๊ณโ
- ๊ฐ์ฒด ์์ฑ โ Eden ์์ญ์ ํ ๋น
- Mark โ GC Root๋ก๋ถํฐ ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ฒด ์ถ์
- Sweep/Copy/Compact
- Young GC: ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ Survivor ๋๋ Old๋ก ๋ณต์ฌ
- Old GC: Mark-Compact๋ก ๋จํธํ ํด์
- Promotion โ ์ผ์ ์์กด ํ์ ์ด์ ๊ฐ์ฒด๋ Old ์์ญ์ผ๋ก ์น๊ฒฉ
โ๏ธ 3. G1 GC ๊ตฌ์กฐ ์์ฝ (JDK 17 ๊ธฐ๋ณธ GC)โ
- ์ ์ฒด ํ์ ๊ณ ์ ํฌ๊ธฐ Region์ผ๋ก ๋๋ (Eden, Survivor, Old, Humongous)
- GC ์ ํ:
- Young GC: Eden โ Survivor
- Mixed GC: ์ผ๋ถ Old๋ ์์ง
- Full GC: ์ ์ฒด ํ ์์ง (๊ฐ๋ฅํ ํํผ)
๐ G1 GC ๋ก๊ทธ ์์โ
[2.303s][info][gc,metaspace] GC(12) Metaspace: 60293K(60736K)->60293K(60736K)
NonClass: 52643K(52864K)->52643K(52864K)
Class: 7650K(7872K)->7650K(7872K)
- Metaspace๋ ํด๋์ค ๋ฉํ๋ฐ์ดํฐ
- NonClass: ๋ฉ์๋, ์ฌ๋ณผ ๋ฑ
- Class: ํด๋์ค ๊ตฌ์กฐ ์ ๋ณด
๐ง 4. Metaspace ๊ด๋ฆฌ ํโ
- Metaspace๋ ํ์ด ์๋ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉ๋จ
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์ ํ โ
-XX:MaxMetaspaceSize๋ก ์ ํ ๊ฐ๋ฅ - ๋์ ClassLoader, SPI ์ฌ์ฉ ์ ๋ฉํ์คํ์ด์ค ๋์ ์ํ โ
-XX:MetaspaceSize=64m
-XX:MaxMetaspaceSize=256m
