Garbage Collection
JVM ์ Garbage Collector ๊ฐ Unreachable Object ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ์ฌ ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ
stop the world
GC ๋ฅผ ์คํํ๊ธฐ ์ํด JVM ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋์ ๋ฉ์ถ๋ ๊ฒ์ผ๋ก ์ด๋ค GC ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ stop the world ๋ ๋ฐ์ํฉ๋๋ค.
stop the world ๊ฐ ๋ฐ์ํ๋ฉด GC ๋ฅผ ์คํํ๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ฐ๋ ๋๋ ๋ชจ๋ ์์ ์ ๋ฉ์ถฅ๋๋ค.
๋๊ฐ์ ๊ฒฝ์ฐ GC ํ๋์ด๋ ์ด stop the world ์๊ฐ์ ์ค์ด๋ ๊ฒ ์ ๋๋ค.
System.gc()
๋ช ์์ ์ผ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์ผ์ด๋๊ฒ ํ์ง๋ง, ๋ชจ๋ ์ค๋ ๋๊ฐ ์ค๋จ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ํตํ ํธ์ถ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค.
Garbage Collection ๊ณผ์
Mark Sweep Compaction
Mark
JVM ์ Garbage Collector ๊ฐ ์คํ์ ๋ชจ๋ ๋ณ์๋ฅผ ์ค์บํ๋ฉด์ ๊ฐ๊ฐ ์ด๋ค ์ค๋ธ์ ํธ๋ฅผ ๋ ํผ๋ฐ์ค ํ๊ณ ์๋์ง ์ฐพ๋ ๊ณผ์
reachable ์ค๋ธ์ ํธ๊ฐ ๋ ํผ๋ฐ์คํ๊ณ ์๋ ์ค๋ธ์ ํธ๋ฅผ marking ํฉ๋๋ค.
๋ชจ๋ ์ค๋ ๋์ ์์ ์ด ์ค๋จ๋ฉ๋๋ค. (stop the world)
Sweep
mark ๋์ด์์ง ์์ ๋ชจ๋ ์ค๋ธ์ ํธ๋ฅผ ํ์์ ์ ๊ฑฐํ๋ ๊ณผ์
Garbage Collection ์ด๋ผ๊ณ ํ๋ฉด garbage ๋ค์ ์์งํ ๊ฒ ๊ฐ์ง๋ง ์ค์ ๋ก๋ garbage ๊ฐ ์๋ ๊ฒ์ ๋ฐ๋ก mark ํ๊ณ ๊ทธ ์ธ์ ๊ฒ์ ๋ชจ๋ ์ง์๋๋ค.
Compact
sweep ๋จ๊ณ ํ ์ด์๋จ์ ๊ฐ์ฒด๋ค ์ฌ์ด์ฌ์ด์ ๋น ๊ณต๊ฐ์ ์ฑ์ฐ๊ณ ์ฐธ์กฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ณผ์ ์์ overhead ๊ฐ ๋ฐ์ํฉ๋๋ค.
Heap Garbage Collection
MinorGC: Young Generation ์์ ๋ฐ์ํ๋ GC
MajorGC: Old Generation (Tenured Space) ์์ ๋ฐ์ํ๋ GC
FullGC: heap ์ ์ฒด๋ฅผ clear ํ๋ ์์ (young/old ๊ณต๊ฐ ๋ชจ๋)
Metaspace: java 1.8 ์ดํ Permanent Generation ์์ ๋ณ๊ฒฝ๋ ๋ช ์นญ์ ๋๋ค. static ๋ณ์, ์์๊ฐ heap ์ผ๋ก ์ด๋ํ์ต๋๋ค.
์๋ก์ด ์ค๋ธ์ ํธ๋ Eden ์ ํ ๋น๋๊ณ , ๋ ๊ฐ์ Survivor Space ๋ ๋น์์ง ์ํ๋ก ์์ํฉ๋๋ค.
Eden ์ด ๊ฐ๋์ฐจ๋ฉด, MinorGC ๊ฐ ๋ฐ์ํฉ๋๋ค.
reachable ์ค๋ธ์ ํธ๋ค์ S0 ์ผ๋ก ์ฎ๊ฒจ์ง๊ณ Eden ์ ํด๋ฆฌ์ด๋ฉ๋๋ค. ์ด๋ unreachable ์ค๋ธ์ ํธ๋ค๋ ๊ฐ์ด ์ฌ๋ผ์ง๋๋ค.
๊ธฐ์กด S0 ์ ์์๋ reachable ์ค๋ธ์ ํธ๋ค์ S1 ์ผ๋ก ์ฎ๊ฒจ์ง๊ณ , ์ด๋ age ๊ฐ์ด ์ฆ๊ฐ๋์ด ์ฎ๊ฒจ์ง๋๋ค.
Young Generation ์์ ๊ณ์ํด์ ์ด์๋จ์ age ๊ฐ์ด ํน์ ๊ฐ ์ด์๋ ์ค๋ธ์ ํธ๋ Old Generation ์ผ๋ก ์ฎ๊ฒจ์ง๋๋ค. (Promotion)
Promotion ์์ ์ด ๊ณ์๋์ Old Generation ์ด ๊ฐ๋์ฐจ๋ฉด MajorGC ๊ฐ ๋ฐ์ํฉ๋๋ค.
Garbage Collector ์ข
๋ฅ
Serial GC -XX:+UseSerialGC
-XX:+UseSerialGC
Java SE 5, 6 ์์ ์ฌ์ฉ๋๋ ๋ํดํธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ
์ ์ ๋ฉ๋ชจ๋ฆฌ์ CPU ์ฝ์ด ๊ฐ์๊ฐ ์ ์ ๋ ์ ํฉํ ๋ฐฉ์
MinorGC, MajorGC ๋ชจ๋ ์์ฐจ์ ์ผ๋ก ์ํ๋๋ฉฐ Mark-Compact collection method ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Mark-Compact collection method: ๋ฉ๋ชจ๋ฆฌ์ ์๋ ์ค๋ธ์ ํธ๋ค์ heap ์ ์์ ์์น๋ก ์ฎ๊ฒจ ๋๋ ๋ฐฉ๋ฒ
Parallel GC (Throughput GC) -XX:+UseParallelGC
-XX:+UseParallelGC
๊ฐ๋น์ง ์ปฌ๋ ์ ์ํ์ ๋ฉํฐ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ (๊ธฐ๋ณธ Young Generation)
๋จ ํธ์คํธ ๋จธ์ ์ด ์ฑ๊ธ CPU ๋ผ๋ฉด ๋ํดํธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ (Serial GC) ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
-XX:+UseParallelOldGC
์ต์ ์ ์ฌ์ฉํ๋ฉด, Old Generation ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์๋ ๋ฉํฐ์ค๋ ๋๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.JDK 5 update 6 ๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ
CMS Collector (Concurrent Mark Sweep Collector, Low Latency GC) -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC
๋๋ถ๋ถ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ๋์์ ์ํํจ์ผ๋ก์จ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ผ๋ก ์ธํ stop the world ๋ฅผ ์ต์ํํ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ
Young Generation ์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ Parallel GC ์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋๋ฐ,
-XX:ParallelCMSThreads={n}
์ต์ ์ผ๋ก ์ค๋ ๋ ๊ฐ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.๋จ์
๋ฉ๋ชจ๋ฆฌ์ CPU ์ฌ์ฉ๋์ด ๋์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก compaction ์์ ์ ์ํํ์ง ์์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํํธํ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. (๋ ํฐ ํ์ฌ์ด์ฆ ํ ๋น)
G1 Garbage Collector -XX:+UseG1GC
-XX:+UseG1GC
๋ฐ์ ํ๋ ํ๋์จ์ด ์คํ์ ๋ฐ๋ผ ์ด์ ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ ํฉํ์ง ์์ ๋์จ ๊ฐ๋น์ง ์ปฌ๋ ํฐ
ํฐ heap ๋ฉ๋ชจ๋ฆฌ์์ ์งง์ GC ์๊ฐ์ ๋ณด์ฅํ๋๋ฐ ๋ชฉ์ ์ด ์์ต๋๋ค.
๊ธฐ์กด์ ๊ณ ์ ๋ ํฌ๊ธฐ, ์์น๊ฐ ์๋ ์ ์ฒด Heap ์์ญ์ Region ์ด๋ผ๋ ํน์ ํ ํฌ๊ธฐ๋ก ๋๋ ๋์ ์ผ๋ก ์ญํ ์ (Eden, Survivor, Old) ๋ถ์ฌํฉ๋๋ค.
Last updated