1. Serial GC๋จ์ผ ์ค๋ ๋๋ฅผ ์ฌ์ฉ. ๋ฉ๋ชจ๋ฆฌ๋ CPU ์ฝ์ด ๊ฐ์๊ฐ 1๊ฐ์ผ ๋ ์ ํฉํ๋ค
โ ๋จ์ผ ์ค๋ ๋์ด๊ธฐ ๋๋ฌธ์ STW๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒด์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ด ๋ง์ด ์ ํ๋จ
โ ์ด๋ฌํ ์ด์ ๋ก ์ค์ ์ด์ ํ๊ฒฝ์์๋ ์ฌ์ฉ๋์ง ์์
์ฌ์ฉ๋ฒ
java -XX:+UseSerialGC -jar Application.java
๊ทธ๋ผ ์ธ์ ์ฌ์ฉ?
2. Parallel GC์๋ฐ 5-8 JVM ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ GC
์ฌ์ฉ ์๊ณ ๋ฆฌ์ฆ์ Serial GC์ ๋์ผํ์ง๋ง ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉ. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง๊ณ ์ฝ์ด ๊ฐ์๊ฐ ๋ง์ ๋ ์ ํฉํ๋ค
(ํ์ง๋ง Old GC์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ ๋ 1๊ฐ๋ฅผ ์ฌ์ฉ)
์ฌ์ฉ๋ฒ
java -XX:+UseParallelGC -jar Application.java
3. G1 GC (Garbage First Garbage Collector)
G1 GC๋ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ์ ํ ํฌ๊ธฐ์ ๋ฐ๋ํ ํํ๋ก ๋๋๋ค
ํ ๋ฉ๋ชจ๋ฆฌ๋ 2048๊ฐ์ Region์ผ๋ก ๋๋ ์ ์๊ณ , ๊ฐ Region ํฌ๊ธฐ๋ 1MB - 32MB ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง
ํฌ๊ธฐ ์กฐ์ ๊ฐ๋ฅ
-XX:G1HeapRegionSize
๋ฉ๋ชจ๋ฆฌ ํํ๋ ๋ค๋ฅธ GC์ ๋ค๋ฅด์ง๋ง, Young/Old ์์ญ ๊ฐ๋ ์ ๊ทธ๋๋ก
์ฌ์ฉ๋ฒ
java -XX:+UseG1GC -jar Application.java
G1 GC๋ STW ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๊ฐ ์ค๋ ๋๊ฐ ์์ ๋ง์ Region์ ์ก๊ณ ๋ณ๋ ฌ์ ์ผ๋ก GC๋ฅผ ์งํํ๋ค
young-only์ space-reclamation ๋จ๊ณ โ GC ์ข
๋ฃ ์กฐ๊ฑด์ ๋ฌ์ฑํ ๋๊น์ง ๋ ๋จ๊ณ๋ฅผ ๋ฐ๋ณตํ๋ค
young-only๋ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฑ์ฐ๋ ๊ณผ์ (promotion)์ ํฌํจ
(= young์ ๊ฐ์ฒด๋ก old ์์ญ์ ๊ฐ์ฒด๋ฅผ ์ฑ์)
space-reclamation์ old ์์ญ์์ ๊ณต๊ฐ์ ๋์ฐพ๊ณ young ์์ญ์ GC๋ฅผ ๊ฐ์ด ์ํ (reclaim)
๋ ๋จ๊ณ ์์ธํ ๋ณด๊ธฐ
G1 GC๋ ๋งํน ์๊ณ ๋ฆฌ์ฆ์ผ๋ก SATB(snapshot-at-the-beginning)์ ์ฌ์ฉํ๋ค
Region Evacuation
G1 GC ์ ๋ณด๋ฅผ ์์ฝํ์๋ฉด
SerialGC, ParallelGC๋ณด๋ค STW ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ GC๋ก, ํ์ ์ผ์ ํฌ๊ธฐ์ Region์ผ๋ก ๋๋๊ณ ๋์ ์ผ๋ก ์ญํ ์ ๋๋ ๊ฐ์ง๋ค. ๊ทธ๋ฆฌ๊ณ young-(minorGC)โold-(mixedGC)๋ฅผ ๋ฐ๋ณตํ๋๋ฐ, mixedGC๋ young Gen๊ณผ ์ฒญ์ํ ๊ฐ์ฒด๊ฐ ๊ฐ์ฅ ๋ง์ ์ผ๋ถ Old Gen์ ํจ๊ป ์ฒญ์ํ๋ ๊ฒ์ด๋ค.
(๋ ๋จ๊ณ ์์ธํ ๋ณด๊ธฐ์์์ Young-only ๋จ๊ณ = minorGC ๋ฐ๋ณต, Space-reclamation ๋จ๊ณ= mixed GC ๋ฐ๋ณต์ด๋ผ๊ณ ์ดํดํ๋ฉด ๋จ)