Garbage Collection
Garbage Collection (GC)
Garbage Collection์ด๋?
Java๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์์ ์๋ํ๋ฅผ ๋์ ํ์ฌ, ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์์ง๋ง ํด์ ๋ ๊ฐ๋ฐ์์ ์์ญ์ด ์๋๋๋ค. ์ด๋ Java์ ์ค์ํ ํน์ง ์ค ํ๋๋ก, ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ Garbage Collector(GC)๊ฐ ์๋์ผ๋ก ์ํํฉ๋๋ค. Java์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ์์ Java Virtual Machine Specification์ ๋ช ์๋์ด ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ Heap๊ณผ Method Area์ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ํน์ ๊ฐ์ฒด ๋จ์๋ก ์ด๋ฃจ์ด์ง๋๋ค. Java์์๋ ๋ณ์๋ ๊ฐ์ฒด๋ฅผ new, newarray, anewarray, multianewarray์ ๊ฐ์ Bytecode๋ก ๋ณํํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ง๋ง, ์ด๋ฏธ ํ ๋น๋ ๊ฐ์ฒด๋ ๋ณ์๋ฅผ ํด์ ํ๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. System.gc() ๋ close() ๊ฐ์ ํจ์๋ ๋ช ์์ ์ผ๋ก GC๋ฅผ ์ํํ๊ฑฐ๋ ํด๋น ๊ฐ์ฒด์ ์ฌ์ฉ์ ์ค์งํ๊ฒ ๋ค๋ ์์ฌ ํํ์ผ ๋ฟ, ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋ ๊ฒ์ ์๋๋๋ค.
Garbage Collection ๋์
Garbage Collection์ ๋์์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด์ ๋๋ค. ์ฌ์ฉ๋์ง ์๋๋ค๋ ์๋ฏธ๋ Root Set๊ณผ์ Reference ๊ด๊ณ๋ก ํ๋จ๋ฉ๋๋ค. Root Set์ ๋ณดํต ์ธ ๊ฐ์ง๋ก ๊ตฌ๋ถ๋ฉ๋๋ค:
Stack์ ์ฐธ์กฐ ์ ๋ณด: LocalVariable Section๊ณผ Operand Stack์ ๊ฐ์ฒด์ Reference ์ ๋ณด๊ฐ ์์ผ๋ฉด ์ด ๊ฐ์ฒด๋ ํ์ฌ ์ฌ์ฉ ์ค์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
Method Area์ ๋ก๋๋ Class: ํนํ Constant Pool์ ์๋ Reference ์ ๋ณด๋ ์ง์ ์ ์ผ๋ก ์ฐธ์กฐํ์ง ์์ง๋ง ๊ฐ์ ์ ์ผ๋ก ๋งํฌํ๊ณ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
Native Method๋ก ๋๊ฒจ์ง ๊ฐ์ฒด Reference: JNI ํ์์ผ๋ก ํ์ฌ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ์๋ ๊ฐ์ฒด์ ๋๋ค.
์ด๋ฌํ Reference ์ ๋ณด์ ์ํด ์ง๊ฐ์ ์ ์ผ๋ก ์ฐธ์กฐ๋๊ณ ์๋ค๋ฉด Reachable Object์ด๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด Garbage Object๋ก GC์ ๋์์ด ๋ฉ๋๋ค.
Garbage Collection์ ๋ชฉ์
GC๋ ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ด ์์ ๋ ์ํ๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์๋ฐ์ด๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๊ณต๊ฐ์ด ๋ถ์กฑํ ์ํฉ์ ๋งํฉ๋๋ค. ์ด๋ฌํ ์ํฉ์์ GC๋ ๋ฉ๋ชจ๋ฆฌ์ ํด์ ๋ฅผ ํตํด ํ์ ๋ Heap ๊ณต๊ฐ์ ์ฌํ์ฉํ๋ ค๋ ๋ชฉ์ ์ผ๋ก ์ํ๋ฉ๋๋ค. GC ํ ๋ฉ๋ชจ๋ฆฌ ํด์ง๋ ํ ๋นํ ๊ทธ ์๋ฆฌ์์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ Garbage๊ฐ ๋น ์ ธ๋๊ฐ ์๋ฆฌ๋ ๋ฌ์ฑ๋ฌ์ฑํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ๋จํธํ(Fragmentation)๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ๋จํธํ๊ฐ ๋ฐ์ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ๋ณ Free Space ํฌ๊ธฐ๋ณด๋ค ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๊ฒฝ์ฐ ์ฌํ์ฉ์ด ์๋ฏธ๊ฐ ์์ด์ง๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด GC๋ Compaction๊ณผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค. ๊ฒฐ๊ตญ GC๋ Root Set์์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ์ฌ ๊ฐ์ฉํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ง๋๋ ์์ ์ ๋๋ค.
Garbage Collection ์๊ณ ๋ฆฌ์ฆ
1. Reference Counting Algorithm
Reference Counting Algorithm์ ๊ฐ ๊ฐ์ฒด๋ง๋ค Reference Count๋ฅผ ๊ด๋ฆฌํ์ฌ Reference Count๊ฐ 0์ด ๋๋ฉด ๊ทธ๋๊ทธ๋ GC๋ฅผ ์ํํ๋ ๋ฐฉ์์ ๋๋ค. ๊ฐ์ฒด์ Reference๊ฐ ์ถ๊ฐ๋๋ฉด Reference Count๋ ์ฆ๊ฐํ๊ณ , Reference๊ฐ ์ฌ๋ผ์ง๋ฉด ๊ฐ์ํฉ๋๋ค. ์ด ๋ฐฉ์์ ๊ฐ๋จํ์ง๋ง ์ํ ์ฐธ์กฐ(Circular Reference) ๋ฌธ์ ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ๊ฐ์ฒด๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๋ฉด Reference Count๊ฐ 0์ด ๋์ง ์์ GC ๋์์ด ๋์ง ์์ต๋๋ค.
2. Mark-and-Sweep Algorithm
Mark-and-Sweep Algorithm์ Tracing Algorithm์ผ๋ก๋ ๋ถ๋ฆฌ๋ฉฐ, Root Set์์ ์์ํ์ฌ Reference ๊ด๊ณ๋ฅผ ์ถ์ ํฉ๋๋ค. Mark Phase์์๋ Garbage Object์ Live Object๋ฅผ ๊ตฌ๋ณํฉ๋๋ค. Marking ์์ ์ ๊ฐ์ฒด์ Header์ Flag๋ฅผ ์ค์ ํ๊ฑฐ๋ ๋ณ๋์ Bitmap Table์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. Sweep Phase์์๋ Marking๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ GC๋ฅผ ๋ณด์ฅํ์ง๋ง, ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค.
3. Mark-and-Compacting Algorithm
Mark-and-Compacting Algorithm์ Mark-and-Sweep Algorithm์ ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๊ณ ์๋์์ต๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ Sweep Phase ๋์ Compaction Phase๋ฅผ ํฌํจํฉ๋๋ค. Compaction ์์ ์ Live ๊ฐ์ฒด๋ฅผ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ์ด๋์์ผ ๋จํธํ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. Mark Phase์์ Marking๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก Live ๊ฐ์ฒด๋ฅผ ์ด๋์ํค๊ณ , Garbage ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ํ์ง๋ง, ๊ฐ์ฒด๋ฅผ ์ด๋์ํค๋ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ธ Overhead๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
4. Copying Algorithm
Copying Algorithm์ Fragmentation ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ๋ ๋ฐฉ์์ ๋๋ค. Heap์ Active ์์ญ๊ณผ Inactive ์์ญ์ผ๋ก ๋๋์ด, Active ์์ญ์๋ง ๊ฐ์ฒด๋ฅผ ํ ๋นํฉ๋๋ค. Active ์์ญ์ด ๊ฐ๋ ์ฐจ๋ฉด GC๊ฐ ์ํ๋์ด Live ๊ฐ์ฒด๋ฅผ Inactive ์์ญ์ผ๋ก ๋ณต์ฌํฉ๋๋ค. ๋ณต์ฌ๋ ๊ฐ์ฒด๋ Inactive ์์ญ์ ๋ฎ์ ์ฃผ์๋ถํฐ ์ฐ์์ ์ผ๋ก ์ ๋ ฌ๋๋ฏ๋ก ๋จํธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ์์ ์ ์ฒด Heap์ ์ ๋ฐ๋ง์ ์ฌ์ฉํ ์ ์๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
5. Generational Algorithm
Generational Algorithm์ Heap์ ์ฌ๋ฌ ์ธ๋(Young Generation, Old Generation)๋ก ๋๋์ด ๊ด๋ฆฌํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ์์ฑ๋ ์ง ์ผ๋ง ์ง๋์ง ์์ Garbage๊ฐ ๋๋ ์งง์ ์๋ช ์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒฝํ์ ์ง์์ ๊ธฐ๋ฐํฉ๋๋ค. Young Generation์์๋ ์ฃผ๋ก ์งง์ ์๋ช ์ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, Old Generation์์๋ ์ค๋๋ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. Young Generation์์ Minor GC๋ฅผ ์ํํ์ฌ Live ๊ฐ์ฒด๋ฅผ Survivor ์์ญ์ผ๋ก ์ด๋์ํค๊ณ , ์ผ์ ํ์ ์ด์ ์ด์๋จ์ ๊ฐ์ฒด๋ Old Generation์ผ๋ก Promotion ๋ฉ๋๋ค.
6. Train Algorithm
Train Algorithm์ Incremental Algorithm์ผ๋ก ๋ถ๋ฆฌ๋ฉฐ, Heap์ ์์ Memory Block์ผ๋ก ๋๋์ด GC๋ฅผ ์ํํฉ๋๋ค. ๊ฐ Block์ Single Block ๋จ์๋ก GC๊ฐ ์ํ๋๋ฉฐ, ์ด๋ ์ ์ฒด Heap์ Suspend ์๊ฐ์ ์ค์ด๊ธฐ ์ํ ๊ฒ์ ๋๋ค. Suspend๋ฅผ ๋ถ์ฐ์์ผ ์ ์ฒด์ ์ธ Pause Time์ ์ค์ด๋ ๊ฒ์ด ๋ชฉ์ ์ ๋๋ค. ๊ฐ Block์ ์๋ก ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ฉฐ, Remember Set์ ํตํด ์ธ๋ถ ์ฐธ์กฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ GC๊ฐ ๊ฐ์ฒด๋ฅผ ์ด๋์ํฌ ๋ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ์ ํํ ์ ์งํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
7. Adaptive Algorithm
Adaptive Algorithm์ ํน์ GC ๋ฐฉ๋ฒ์ ์ง์นญํ๋ ๊ฒ์ด ์๋๋ผ, Heap์ ํ์ฌ ์ํฉ์ ๋ชจ๋ํฐ๋งํ์ฌ ์ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํ ์ ์ฉํ๊ฑฐ๋ Heap Sizing์ ์๋ํํ๋ ์ผ๋ จ์ ๋ฐฉ๋ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ Hotspot JVM์ Ergonomics ๊ธฐ๋ฅ์ด๋ IBM JVM์ Tilting ๊ธฐ๋ฅ ๋ฑ์ผ๋ก ๊ตฌํ๋ฉ๋๋ค. Adaptive Algorithm์ Application์ด๋ ์ฌ์ฉ์์ ํจํด์ ๋ฐ๋ผ ์ต์ ์ GC ๋ฐฉ์์ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Hotspot JVM์ Garbage Collection
Hotspot JVM์ Generational Collection ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค. Heap์ Young Generation๊ณผ Old Generation์ผ๋ก ๋๋์ด ๊ด๋ฆฌํฉ๋๋ค. Young Generation์ Eden ์์ญ๊ณผ ๋ ๊ฐ์ Survivor ์์ญ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. Young Generation์์ Minor GC๋ฅผ ์ํํ๊ณ , ์ฑ์๋ ๊ฐ์ฒด๋ Old Generation์ผ๋ก Promotion ๋ฉ๋๋ค. Major GC๋ Old Generation์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ ์ํ๋ฉ๋๋ค.
์ฃผ์ Garbage Collector
Serial Collector: ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ GC ๋ฐฉ์์ผ๋ก, Single CPU๋ฅผ ์ฌ์ฉํ์ฌ Serial๋ก GC๋ฅผ ์ํํฉ๋๋ค. Young Generation์์๋ Generational Algorithm์, Old Generation์์๋ Mark-and-Compacting Algorithm์ ์ฌ์ฉํฉ๋๋ค.
Parallel Collector: ์ฒ๋ฆฌ๋์ ์ค์ํ๋ GC ๋ฐฉ์์ผ๋ก, Young Generation์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ์ฌ ์ฒ๋ฆฌ๋์ ์ฆ๊ฐ์ํต๋๋ค. Old Generation์์๋ ๊ธฐ์กด์ Mark-and-Compacting Algorithm์ ์ฌ์ฉํฉ๋๋ค.
Parallel Compacting Collector: Young Generation๊ณผ Old Generation ๋ชจ๋์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ์ฌ GC๋ฅผ ์ํํฉ๋๋ค. Old Generation์์๋ Parallel Compaction Algorithm์ ์ฌ์ฉํฉ๋๋ค.
CMS (Concurrent Mark-Sweep) Collector: ์๋ต ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํ Low Pause Collector๋ก, Young Generation์์๋ Parallel Copy Algorithm์, Old Generation์์๋ Concurrent Mark-and-Sweep Algorithm์ ์ฌ์ฉํฉ๋๋ค.
G1 (Garbage First) Collector: ์ค์๊ฐ ์ฑ๋ฅ์ ๋ชฉํ๋ก ํ๋ GC ๋ฐฉ์์ผ๋ก, ๋ค์ํ ํฌ๊ธฐ์ Region์ ์ฌ์ฉํ์ฌ GC๋ฅผ ์ํํฉ๋๋ค. Generational ๊ตฌ๋ถ ์์ด ํ์ํ Region์ GC ๋์์ผ๋ก ์ผ์, Suspend ์๊ฐ์ ์ต์ํํฉ๋๋ค.
JVM ์ต์
JVM ์ต์ ์ ํฌ๊ฒ Standard Option๊ณผ Non-Standard Option์ผ๋ก ๋๋ฉ๋๋ค. Non-Standard Option์ JVM๋ง๋ค ๋ค๋ฅด๋ฉฐ, ์ฑ๋ฅ ๊ฐ์ ์ ์ํ ๋ค์ํ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ Heap Sizing ๊ด๋ จ ์ต์
Heap Sizing ๊ด๋ จ ์ต์ ์ ์ด๊ธฐ Heap ํฌ๊ธฐ, ์ต๋ Heap ํฌ๊ธฐ, Young Generation์ ํฌ๊ธฐ, Permanent Area์ ํฌ๊ธฐ ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ JVM์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ต์ ํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
Hotspot JVM์ ๊ฐ์ฒด์ ๋์ด์ ํจ๊ป ํ๋ก๋ชจ์ ์ ์ํ ์๊ณ๊ฐ์ ์ค์ ํ๋ ์ต์ ์ ์ ๊ณตํจ. ์ด ์ต์ ์
-XX:MaxTenuringThreshold
๋ก ๊ธฐ๋ณธ๊ฐ์ 31์ด๋ค. ์ด ์์น๊ฐ ์๋ค๊ณ ์๊ฐํด 100์ด๋ 1000์ผ๋ก ์ค์ ํด๋ ์ค์ ๋์ด์ ์ต๋๊ฐ์ 31์ด๋ค. ๊ทธ ์ด์ ๋ ๊ฐ์ฒด ํค๋์ ์ฒซ ๋ฒ์งธ ์๋์ ๊ธฐ๋ก๋ ๋์ด๊ฐ 6๋นํธ๋ก ํํ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ 0๋ถํฐ 31๊น์ง์ ๊ฐ๋ง์ ๊ธฐ๋กํ ์ ์๋ค.
Promotion and Survivor Areas in Hotspot JVM
๊ทธ๋ฆผ 51์์๋ ๋งํฌ ๋จ๊ณ๊ฐ ๋๋ ํ ํ๋ก๋ชจ์ ๊ฐ๋ฅํ ์ฑ์ํ ๊ฐ์ฒด๋ฅผ ํ์ํ๊ณ ์๋ค. Eden ์์ญ์๋ LiveObjectA๊ฐ ์๊ณ Survivor 2์๋ LiveObject๋ก B์ M์ด ์๋ค. ์ด ์ค M์ ์ฑ์ํ ๊ฐ์ฒด์ด๋ค.
From๊ณผ To๋ ๋ ผ๋ฆฌ์ ์ธ ๋ช ์นญ์ผ๋ก, ํญ์ To ์์ญ์ผ๋ก ๋ณต์ฌ๋๊ณ From ์์ญ์ ๋ณด๋ด๊ธฐ๋ง ํ๋ค. Minor GC ๋น์ ๊ฐ์ฒด๊ฐ ๋จ์ ์๋ ๊ณณ์ด From์ด ๋๊ณ ๋น์ด ์๋ ๊ณณ์ด To๊ฐ ๋๋ค. ์ดํ ๋ค์ Minor GC์๋ From๊ณผ To๊ฐ ์๋ก ๋ค๋ฐ๋๋ค.
Old Generation์ Garbage Collection: Mark-and-Compacting
Old Generation์ Young Generation๊ณผ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก GC๋ฅผ ์ํํ๋ค. Old Generation์ GC๋ ์์ฃผ ๋ฐ์ํ์ง ์์ง๋ง ๋ฐ์ ์ Minor GC๋ณด๋ค ๋ ๊ธด ์ผ์ ์ ์ง ์๊ฐ์ ํ์๋ก ํ๋ค. ์ด๋ Old Generation์ ํฌ๊ธฐ๊ฐ Young Generation๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
Old Generation์ Mark-and-Compaction ์๊ณ ๋ฆฌ์ฆ์ผ๋ก GC๋ฅผ ์ํํ๋ฉฐ, ์ด๋ ์๊ฐ์ด ๋ง์ด ์์๋๋ค. Old Generation์์์ GC๋ ํ๋ก๋ชจ์ ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋ ๋ฐ์ํ๋ค.
Serial Collector ์ต์
-XX:+UseSerialGC
: Serial Collector๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ค์ ํด์ผ ํ๋ ์ต์ .-XX:InitialTenuringThreshold=<value>
: ๊ฐ์ฒด์ ์ด๊ธฐ ๋์ด๋ฅผ ์ค์ ํ๋ ์ต์ . ๊ธฐ๋ณธ๊ฐ์ 0์ด๋ฉฐ, ๊ฐ์ฒด๋ฅผ ๋นจ๋ฆฌ ํ๋ก๋ชจ์ ๋๊ฒ ํ๋ ค๋ฉด ์ด๋ฅผ ์ฆ๊ฐ์ํจ๋ค.-XX:MaxTenuringThreshold=<value>
: ๊ฐ์ฒด๊ฐ ํ๋ก๋ชจ์ ๋๋ ๋์ด๋ฅผ ์ง์ ํ๋ ์ต์ . ๊ธฐ๋ณธ๊ฐ์ 31์ด๋ค.-XX:PretenureSizeThreshold=<byte size>
: Young Generation์ ์์ฑ๋๋ ๊ฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ์ ํํ๋ ์ต์ . ์ค์ ๋ ํฌ๊ธฐ๋ณด๋ค ํฐ ๊ฐ์ฒด๋ Tenured ์์ญ์ ๋ฐ๋ก ์์ฑ๋๋ค.-XX:+PrintTenuringDistribution
: Young Generation์ ํ ๋น๋ ๊ฐ์ฒด์ ๋์ด ์ ๋ณด์ ์๋ฐ์ด๋ฒ ์์ญ์ ์ ์ ์๊ณ๊ฐ ๋ฑ์ ํ๋จํ ์ ์๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
Incremental Collector
Incremental Collector๋ 1.3.1 ๋ฒ์ ์์ ์๊ฐ๋ Low Pause Goal์ ์ถฉ์กฑ์ํค๊ธฐ ์ํ ์ต์ด์ Collector์ด๋ค. Young Generation์ GC๋ฅผ ์ํด Serial Collector์ ๋์ผํ Generational Algorithm์ ์ฌ์ฉํ์ง๋ง, Old Generation์์๋ Train Algorithm์ ์ฌ์ฉํ๋ค.
Parallel Collector
Parallel Collector๋ ์ฌ๋ฌ ๊ฐ์ ๋ฉํฐ ์ค๋ ๋๊ฐ ๋์์ GC๋ฅผ ์ํํ๋ค. Young Generation์์๋ง ์ ์ฉ๋๋ฉฐ, Old Generation์ Mark-and-Compacting ๋ฐฉ์์ ์ ์งํ๋ค.
-XX:+UseParallelGC
: Parallel Collector๋ฅผ ์ ํํ๋ ์ต์ .-XX:ParallelGCThreads=<value>
: GC๋ฅผ ์ํํ ์ค๋ ๋์ ๊ฐ์๋ฅผ ์ค์ ํ๋ ์ต์ . ๊ธฐ๋ณธ๊ฐ์ CPU ๊ฐ์์ ๋์ผํ๋ค.-XX:+AlwaysTenure
: ๋ชจ๋ ๊ฐ์ฒด๋ฅผ Old Generation์ผ๋ก ํ๋ก๋ชจ์ ํ๋ ์ต์ .
CMS (Concurrent Mark-Sweep) Collector
CMS Collector๋ Pause Time Goal์ ๊ฐ์ง Collector๋ก, Old Generation์ GC๋ฅผ Concurrentํ๊ฒ ์ํํ์ฌ ์ผ์ ์ ์ง ์๊ฐ์ ์ค์ธ๋ค.
-XX:+UseConcMarkSweepGC
: CMS Collector๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ต์ .-XX:+UseParNewGC
: Young Generation์์ Parallel GC๋ฅผ ์ํํ๋๋ก ์ค์ ํ๋ ์ต์ .-XX:+CMSParallelRemarkEnabled
: Remark Phase์ ์ผ์ ์ ์ง ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ต์ .
Garbage First (G1) Collector
G1 Collector๋ Region ๋จ์๋ก Heap์ ๋๋์ด ๊ด๋ฆฌํ๋ฉฐ, Pause Time Goal์ ๊ฐ์ง๋ฉด์๋ ์์ธก ๊ฐ๋ฅํ ์ผ์ ์ ์ง ์๊ฐ์ ์ ๊ณตํ๋ค.
-XX:+UnlockExperimentalVMOptions
: G1 Collector๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์คํ์ ์ต์ ์ ํ์ฑํํ๋ ์ต์ .-XX:+UseG1GC
: G1 Collector๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ต์ .
IBM JVM Garbage Collection
IBM JVM์ GC๋ Hotspot JVM๊ณผ๋ ๋ค๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, Generational Heap์ ์ฌ์ฉํ๊ณ ๊ฐ ๋จ๊ณ๋ง๋ค Mark, Sweep, Compaction ๋จ๊ณ๋ฅผ ํฌํจํ๋ค.
-Xgcpolicy:<optthruput | optavgpause | gencon | subpool>
: GC ์ ์ฑ ์ ์ ํํ๋ ์ต์ .-disableexplicitgc
: ๋ช ์์ ์ธ GC ํธ์ถ์ ๋ฌด์ํ๋ ์ต์ .-verbose:gc
: GC ์ ๋ณด๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ ์ต์ .-compactexplicitgc
: ๋ช ์์ ์ธ GC ํธ์ถ ์๋ง๋ค Compaction์ ์ํํ๋๋ก ์ค์ ํ๋ ์ต์ .
Optimize for Throughput Collector
์ด Collector๋ ์ฒ๋ฆฌ๋์ ์ด์ ์ ๋ง์ถ๊ณ ๋ณ๋ ฌ๋ก GC๋ฅผ ์ํํ๋ฉฐ, AF (Allocation Failure) ์ Compaction์ ์ํํ๋ค.
Parallel Mark
,Parallel Bitwise Sweep
,Incremental Compaction
๋ฑ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
Optimize for Pause Time Collector
Pause Time์ ์ค์ด๊ธฐ ์ํด Concurrentํ๊ฒ GC๋ฅผ ์ํํ๋ฉฐ,
Concurrent Mark
,Concurrent Sweep
,Mostly Concurrent Compaction
๋ฑ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
Generational Concurrent Collector
Young Generation๊ณผ Old Generation์ ๊ตฌ๋ถํ์ฌ GC๋ฅผ ์ํํ๋ฉฐ,
Scavenge
,Global Collection
๋ฑ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
Subpooling Collector
๋๊ท๋ชจ SMP ์์คํ ์์ ์ฌ์ฉ๋๋ฉฐ, FreeList๋ฅผ ํฌ๊ธฐ๋ณ๋ก ๊ตฌ์ฑํ์ฌ ์ฌ์ฉํ๋ค.
์ด ๊ฐ์ด๋๋ ๊ฐ JVM์ GC ์ต์ ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ณ ์ ์ ํ๊ฒ ์ค์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ๋์์ ์ค ์ ์๋ค.
Last updated