GC
GC(Garbage Collection)๋ ๋ฌด์์ธ๊ฐ์?
GC(Garbage Collection)
ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์ ํจํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ์ธ ๊ฐ๋น์ง(Garbage) ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
Java๋ฅผ ์ด์ฉํด ๊ฐ๋ฐํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ฃผ๋ ์ผ์ ์๋๋ฐ, ์ด๋ JVM์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์์ ์ ๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ณผ์ ์ผ๋ก๋ ํ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ํ์ํ์ง ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฒ์ฌํ๋ Mark and Sweep, ์์ง ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๋ Compact๊ณผ์ ์ด ์๋ค.
์ฅ์
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ (
Memory leak)๋ฅผ ๊ฐ๋ฐ์๊ฐ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ค.์๋์ ์ผ๋ก
System.gc()๋ฅผ ์ด์ฉํด ํธ์ถํ ์ ์์ง๋ง, ์์คํ ์ฑ๋ฅ์ ๋งค์ฐ ํฐ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ํธ์ถํด์๋ ์ ๋๋ค.
๋จ์
GC๋ฅผ ์ํํ ๋ ๋ค๋ฅธ ๋์์ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋๋ฐ, ์ํ๋๋ ์์ ์ ํ์ ํ๊ธฐ ์ด๋ ต๋ค.
Heap์ ํน์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ๋ค ์ฐผ์ ๋ ์ํ๋๊ธด ํ์ง๋ง, ๊ทธ ์์ ์ ์ ํํ๊ฒ ์์ธกํ๊ธฐ ์ด๋ ต๋ค.
GC์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ ๋ฌด์์ธ๊ฐ์?
๊ณผ๊ฑฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ธฐ๋ฅ์ด ์กด์ฌํ์ง ์๊ฑฐ๋ ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ํด์ ํ๋ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.(๋ํ์ ์ผ๋ก C, C++)
OS ๋ ๋ฒจ์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ํ ๋น๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ช ์์ ์ผ๋ก ํด์ ํด์ค์ผ ํ๋ค.
์ด๋ฐ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ์ค์๋ค๋ก ์ธํด ๋ฒ๊ทธ์ ์์ธ์ด ๋๋ค.
์ด์ค ํด์ : ํด์ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์๋ก ์ฌํด์
์ ํจํ์ง ์์ ํฌ์ธํฐ ์ ๊ทผ : ํด์ฌํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์๋ก ์ฌ์ฌ์ฉ
๋ฉ๋ชจ๋ฆฌ ๋์(
Memory Leak) : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ํ ํ์ ์์ด์ง ๋ค์๋ ํด์ ๋ฅผ ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์, ์ด๋ฐ ๋์๊ฐ ์์ฌ ํ๋ก๊ทธ๋จ ์ข ๋ฃ๊น์ง ์ด์ด์ง ์ ์์
Java์์๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๋ค์ด ์๋ค.
Java ํ๋ก์ธ์ค๊ฐ ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
๊ฐ๋ฐ์ ์ ์ฅ์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ์ ๋ํด ๊ด๋ฆฌํ์ง ์์๋ ๋ผ ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๋ค.
Heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด์ ์ค๋ช
ํด ์ฃผ์ธ์.
JVM์ ํ ์์ญ์ ๋์ ์ผ๋ก ๋ ํผ๋ฐ์ค ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ผ๋ก, ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋์์ด ๋๋ ๊ณต๊ฐ์ด๋ค.
JVM์ Heap ์์ญ์ ์ฒ์ ์ค๊ณ๋ ๋ ๋ค์ 2๊ฐ์ง๋ฅผ ์ ์ ๋ก ์ค๊ณ๋์๋ค.
๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค.
์ค๋๋ ๊ฐ์ฒด์์ ์๋ก์ด ๊ฐ์ฒด ์ฐธ์กฐ๋ ์์ฃผ ๋๋ฌผ๋ค.
์ฆ, ๊ฐ์ฒด๋ ๋๋ถ๋ถ ์ผํ์ฑ์ด๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ซ๋์ ๋จ์์๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค๋ ๊ฒ์ด๋ค.
๋๋ฌธ์ ๊ฐ์ฒด์ ์์กด ๊ธฐ๊ฐ์ ๋ฐ๋ผ ๋ฌผ๋ฆฌ์ ์ธ Heap ์์ญ์ ๋๋๊ฒ ๋์๊ณ Young, Old 2๊ฐ์ง ์์ญ์ผ๋ก ์ค๊ณ๋์๋ค.


Young ์์ญ
์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น(
Allocation)๋๋ ์์ญ๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ํ(
UnReachable)๊ฐ ๋๊ธฐ ๋๋ฌธ์, ๋ง์ ๊ฐ์ฒด๊ฐYoung์์ญ์ ์์ฑ๋์๋ค๊ฐ ์ฌ๋ผ์ง๋ค.Young์์ญ์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ Minor GC๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Old ์์ญ
Young์์ญ์์ ์ ๊ทผ ๊ฐ๋ฅํ ์ํ๋ฅผ ์ ์งํ์ฌ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ๋ณต์ฌ๋๋ ์์ญYoung์์ญ๋ณด๋ค ํฌ๊ฒ ํ ๋น๋๋ฉฐ, ์์ญ์ ํฌ๊ธฐ๊ฐ ํฐ ๋งํผ ๊ฐ๋น์ง(Garbage)๋ ์ ๊ฒ ๋ฐ์ํ๋ค.Old์์ญ์ ๋ํ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ Major GC๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Old์์ญ์ดYoung์์ญ๋ณด๋ค ํฌ๊ฒ ํ ๋น๋๋ ์ด์ ๋Young์์ญ์ ์๋ช ์ด ์งง์ ๊ฐ์ฒด๋ค์ ํฐ ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์์ผ๋ฉฐ, ํฐ ๊ฐ์ฒด๋ค์Young์์ญ์ด ์๋๋ผ ๋ฐ๋กOld์์ญ์ ํ ๋น๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์
์ ๋์ ๋ฐฉ์
1. Stop The World
Stop The World๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์คํํ๊ธฐ ์ํด JVM์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ ๋ฉ์ถ๋ ์์ ์ด๋ค.
GC๊ฐ ์คํ๋ ๋๋ GC๋ฅผ ์คํํ๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ฐ๋ ๋๋ค์ ์์ ์ด ์ค๋จ๋๊ณ , GC๊ฐ ์๋ฃ๋๋ฉด ์์ ์ด ์ฌ๊ฐ๋๋ค.
๋ชจ๋ ์ฐ๋ ๋๋ค์ ์์ ์ด ์ค๋จ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฉ์ถ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, GC ์ฑ๋ฅ ๊ฐ์ ์ ์ํด ํ๋์ ํ๋ค๊ณ ํ๋ฉด
Stop The World์ ์๊ฐ์ ์ค์ด๋ ์์ ์ ํ๋ ๊ฒ์ด๋ค.
2. Mark and Sweep
Mark : ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๋ ์์
Sweep : Mark ๋จ๊ณ์์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ก ์๋ณ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ์์
Stop The World๋ฅผ ํตํด ๋ชจ๋ ์์ ์ ์ค๋จ์ํค๋ฉด, GC๋ ์คํ์ ๋ชจ๋ ๋ณ์ ๋๋Reachable๊ฐ์ฒด๋ฅผ ์ค์บํ๋ฉด์ ๊ฐ๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋์ง ํ์ํ๋ค.๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ๋๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๋๋ฐ, ์ด๋ฐ ๊ณผ์ ์ Mark๋ผ๊ณ ํ๋ค.
์ดํ์ Mark๊ฐ ๋์ง ์์ ๊ฐ์ฒด๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋๋ฐ, ์ด๋ฐ ๊ณผ์ ์ Sweep์ด๋ผ๊ณ ํ๋ค.
Minor GC ๋์ ๋ฐฉ์
ํ ์์ญ์์
Young์์ญ์ ํจ์จ์ ์ธ GC๋ฅผ ์ํด 1๊ฐ์Eden์์ญ๊ณผ 2๊ฐ์Survivor์์ญ์ผ๋ก ๋๋๋ค.Eden ์์ญ : ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ํ ๋น(
Allocation)๋๋ ์์ญSurvivor ์์ญ :
Minor GC๋ก๋ถํฐ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ์กด์ฌํ๋ ์์ญ

๊ฐ์ฒด๊ฐ ์๋กญ๊ฒ ์์ฑ๋๋ฉด
Young์์ญ ์ค์์๋Eden์์ญ์ ํ ๋น๋๊ณ ,Eden์์ญ์ด ๊ฝ ์ฐจ๋ฉดMinor GC๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋๊ณ ,
Eden์์ญ์ ์กด์ฌํ๋ ๊ฐ์ฒด๋(์ฌ์ฉ์ค์ธ ๊ฐ์ฒด)Survivor์์ญ์ผ๋ก ์ฎ๊ฒจ์ง๊ฒ ๋๋ค.์ฌ๊ธฐ์
Survivor์์ญ์ ์ด 2๊ฐ์ด์ง๋ง ๋ธ๋ค์ 1๊ฐ์ ์์ญ์๋ง ๋ฐ์ดํฐ๊ฐ ์กด์ฌํด์ผ ํ๋ค.
Young ์์ญ ๋์ ์์
์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ
Eden์์ญ์ ํ ๋น๊ฐ์ฒด๊ฐ ๊ณ์ ์์ฑ๋์ด
Eden์์ญ์ด ๊ฝ์ฐจ๋ฉดMinor GC์คํEden์์ญ์์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ค.Eden์์ญ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ 1๊ฐ์Survivor์์ญ์ผ๋ก ์ด๋๋๋ค.
1 ~ 2๊ณผ์ ์ด ๋ฐ๋ณต๋๋ค๊ฐSurvivor์์ญ์ด ๊ฐ๋ ์ฐจ๋ฉดSurvivor์์ญ์ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธSurvivor์์ญ์ผ๋ก ์ด๋์ํจ๋ค.(1๊ฐ์Survivor์์ญ์ ๋ฐ๋์ ๋น ์ํ๊ฐ ๋๋ค.)์ด๋ฐ ๊ณผ์ ์ ๋ฐ๋ณตํด ๊ณ์ํด์ ์ด์๋จ์ ๊ฐ์ฒด๋
Old์์ญ์ด๋ก ์ด๋(Promotion) ๋๋ค.
๊ฐ์ฒด์ ์์กด ํ์๋ฅผ ์นด์ดํธํ๊ธฐ ์ํด Minor GC์์ ๊ฐ์ฒด๊ฐ ์ด์๋จ์ ํ์๋ฅผ ์๋ฏธํ๋ age-bit๋ฅผ ๊ธฐ๋กํ๋ค.(Minor GC์์ ์ด์๋จ์ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ)
๊ทธ๋ฆฌ๊ณ Minor GC ๋ age-bit๊ฐ ์ด๋(Promotion) ๊ฒฐ์ ์ฌ๋ถ๊ฐ ๋๋ค.
๋ํ Survivor ์์ญ ์ค 1๊ฐ๋ ๋ฐ๋์ ์ฌ์ฉ์ด ๋์ด์ผ ํ๋๋ฐ, ๋ง์ฝ ๋ Survivor ์์ญ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๊ฑฐ๋, ๋ชจ๋ ์ฌ์ฉ๋์ด 0์ด๋ผ๋ฉด ํ์ฌ ์์คํ
์ด ์ ์์ ์ธ ์ํฉ์ด ์๋์ ํ์
ํ ์ ์๋ค.

HotSpot JVM์์๋Eden์์ญ์ ๊ฐ์ฒด๋ฅผ ๋น ๋ฅด๊ฒ ํ ๋นํ๊ธฐ ์ํด bump the pointer์ TLABs๋ผ๋ ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์๋ค.
bump the pointer
Eden์์ญ์ ๋ง์ง๋ง์ผ๋ก ํ ๋น๋ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ์บ์ฑํด๋๋ ๊ฒ์ด๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ํด ์ ํจํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ ํ์ ์์ด ๋ง์ง๋ง ์ฃผ์์ ๋ค์ ์ฃผ์๋ฅผ ์ฌ์ฉํ๊ฒ ํด ์๋๋ฅผ ๋์ผ ์ ์๋ค.
์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ
Eden์์ญ์ ์ ํฉํ์ง๋ง ํ๋จํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ ์ ์๋ค.TLABs(Thread-Local Allocation Buffers)
๊ฐ๊ฐ์ ์ฐ๋ ๋๋ง๋ค
Eden์์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ธฐ ์ํ ์ฃผ์๋ฅผ ๋ถ์ฌํด ๋๊ธฐํ ์์ ์์ด ๋น ๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋๋ก ํ๋ ๊ธฐ์์ฑ๊ธ ์ฐ๋ ๋ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ฌธ์ ๊ฐ ์๊ฒ ์ง๋ง ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์ด๋ผ๋ฉด
Eden์์ญ์ ํ ๋นํ ๋ ๋ฝ์ ๊ฑธ์ด ๋๊ธฐํ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
HotSpot JVM์ ์ถ๊ฐ๋ก TLABs๋ผ๋ ๊ธฐ์ ์ ๋์ ํ๋ค.๊ฐ๊ฐ์ ์ฐ๋ ๋๋ ์์ ์ด ๊ฐ๋ ์ฃผ์์๋ง ๊ฐ์ฒด๋ฅผ ํ ๋นํจ์ผ๋ก์จ ๋๊ธฐํ ์์ด
bump the pointer๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋๋ก ํ๋ค.
Major GC ๋์ ๋ฐฉ์
Young์์ญ์์ ์ค๋ ์ด์๋จ์ ๊ฐ์ฒด๋Old์์ญ์ผ๋ก ์ด๋(Promotion)๋๋ค.Major GC๋ ๊ฐ์ฒด๋ค์ด ๊ณ์ ์ด๋๋์ดOld์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง๋ฉด ๋ฐ์ํ๋ค.Young์์ญ์ ์ผ๋ฐ์ ์ผ๋ก ํฌ๊ธฐ๊ฐ ์์Minor GC๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ฒ ์ํฅ์ ์ฃผ์ง ์๋๋ค.ํ์ง๋ง
Old์์ญ์ ํฌ๊ธฐ๋ ํฌ๋ฉฐYoung์์ญ์ ์ฐธ์กฐํ ์๋ ์๊ธฐ ๋๋ฌธ์Major GC๋Minor GC๋ณด๋ค ํจ์ฌ ์ค๋ ์๊ฐ์ด ์์๋๋ค.Young์์ญ๊ณผOld์์ญ์ ๋์์ ์ฒ๋ฆฌํ๋ GC๋ Full GC๋ผ๊ณ ํ๋ค.
๋์
Young ์์ญ
Old ์์ญ
์คํ ์์
Eden ์์ญ์ด ๊ฝ ์ฐฌ ๊ฒฝ์ฐ
Old ์์ญ์ด ๊ฝ ์ฐฌ ๊ฒฝ์ฐ
์คํ ์๋
๋น ๋ฅด๋ค
๋๋ฆฌ๋ค
๊ฐ๋น์ง ์ปฌ๋ ์
์ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช
ํด ์ฃผ์ธ์.
JVM์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ ์ฅ์์ ์๋นํ ๋ฉ๋ฆฌํธ์ด์ง๋ง, ๋ฌธ์ ๋ GC๋ฅผ ์ํํ๊ธฐ ์ํด
Stop The World์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค์ง๋๋ค๋ ๊ฒ์ด๋ค.์ด๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ๋ค์ํ GC ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋ฐ ๋์๋ค.
Serial GC

์๋ฒ์ CPU ์ฝ์ด๊ฐ 1๊ฐ์ผ ๋ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ๋ฐ๋ ๊ฐ์ฅ ๋จ์ํ GC
GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ฐ๋ ๋๊ฐ 1๊ฐ(์ฑ๊ธ ์ฐ๋ ๋) ์ฌ์ GC ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ
Stop The World์๊ฐ์ด ๊ธธ๋ค.Minor GC์๋ Mark-Sweep์ ์ฌ์ฉํ๊ณ ,Major GC์๋ Mark-Sweep-Compaction์ ์ฌ์ฉํ๋ค.
Parallel GC

Java 8์ ๋ํดํธ GC ๋ฐฉ์
Serial GC์ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๊ณ ,Young์์ญ์Minor GC๋ฅผ ๋ฉํฐ ์ฐ๋ ๋๋ก ์ํํ๋ค.(Old์์ญ์ ์ฑ๊ธ ์ฐ๋ ๋๋ก)Serial GC์ ๋นํดStop The World์๊ฐ์ด ๊ฐ์ํ๋ค.
Parallel Old GC(Parallel Compacting Collector)

Parallel GC๋ฅผ ๊ฐ์ ํ ๋ฒ์
Young์์ญ ๋ฟ๋ง ์๋๋ผ,Old์์ญ์์๋ ๋ฉํฐ ์ฐ๋ ๋๋ก GC๋ฅผ ์ํํ๋ค.์๋ก์ด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฒญ์ ๋ฐฉ์์ธ
Mark-Summary-Compact๋ฐฉ์์ ์ด์ฉํ๋ค.
CMS(Concurrent Mark Sweep) GC

Stop The World์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ๋๋ถ๋ถ์ ๊ฐ๋น์ง(Garbage) ์์ง ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๋ ๋์ ๋์์ ์ํํด์
Stop The World์๊ฐ์ ์ต์ํ ์ํจ๋ค.ํ์ง๋ง CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ
Mark and Sweep์ดํ ๋ฉ๋ชจ๋ฆฌ ํํธํ๋ฅผ ํด๊ฒฐํ๋Compaction์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ง ์๋๋ค๋ ๋จ์ ์ด ์๋ค.Java 9 ๋ถํฐ
deprecated๋์๊ณ , Java 14 ์์๋ ์ฌ์ฉ์ด ์ค์ง๋์๋ค.G1 GC์ ๋ฑ์ฅ์ ๋ฐ๋ผ CMS CG๋ ๋์ฒด๋์๋ค.
G1(Garbage-First) GC
CMS GC๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๊ฐ๋ฐ๋์๊ณ , Java 9 ์ด์ ๋ฒ์ ์์ ๋ํดํธ GC๋ก ์ฌ์ฉํ๋ค.
๊ธฐ์กด GC ์๊ณ ๋ฆฌ์ฆ์์
Heap์์ญ์ ๋ฌผ๋ฆฌ์ ์ผ๋กYoung์์ญ(1๊ฐ์Eden๊ณผ 2๊ฐ์Survivor์์ญ)๊ณผOld์์ญ์ผ๋ก ๋๋์ด ์ฌ์ฉํ์๋ค.G1 GC๋
Eden์์ญ์ ํ ๋นํ๊ณ ,Survivor๋ก ์นดํผํ๋ ๋ฑ์ ๊ณผ์ ์ ์ฌ์ฉํ์ง๋ง ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๋์ง ์๋๋ค.๋์ Region์ด๋ผ๋ ์๋ก์ด ๊ฐ๋ ์ ๋์ ํ์ฌ
Heap์ ๊ท ๋ฑํ๊ฒ ์ฌ๋ฌ ๊ฐ์ ์ง์ญ์ผ๋ก ๋๋๊ณ , ๊ฐ ์ง์ญ์ ์ญํ ๊ณผ ํจ๊ป ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถํ์ฌEden์ง์ญ์ธ์ง,Survivor์ง์ญ์ธ์ง,Old์ง์ญ์ธ์ง ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ค.

G1 GC์์๋
Eden,Survivor,Old์ ๋ํดHumonogous์Available/Unused๋ผ๋ 2๊ฐ์ง ์ญํ ์ ์ถ๊ฐํ๋ค.Humonogous๋ Region ํฌ๊ธฐ์ 50% ๋ฅผ ์ด๊ณผํ๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋Region์ ์๋ฏธํ๋ฉฐ,Available/Unused๋ ์ฌ์ฉ๋์ง ์์Region์ ์๋ฏธํ๋ค.G1 GC์ ํต์ฌ์ Heap์ ๋์ผํ ํฌ๊ธฐ์ Region์ผ๋ก ๋๋๊ณ , ๊ฐ๋น์ง๊ฐ ๋ง์ Region์ ๋ํด ์ฐ์ ์ ์ผ๋ก GC๋ฅผ ์ํํ๋ ๊ฒ์ด๋ค.
G1 GC๋
Minor GC์Major GC๋ก ๋๋์ด ์ํ๋๋ค.
Minor GC
ํ ์ง์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ค๊ฐ ํด๋น ์ง์ญ์ด ๊ฝ ์ฐจ๋ฉด ๋ค๋ฅธ ์ง์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ ,
Minor GC๊ฐ ์คํ๋๋ค.G1 GC๋ ๊ฐ ์ง์ญ์ ์ถ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๊ฐ๋น์ง๊ฐ ๊ฐ์ฅ ๋ง์(
Garbage First) ์ง์ญ์ ์ฐพ์์ Mark and Sweep์ ์ํํ๋ค.Eden์ง์ญ์์ GC๊ฐ ์ํ๋๋ฉด ์ด์๋จ์ ๊ฐ์ฒด๋ฅผMarkํ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผSweep(ํ์)ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ์ง์ญ์ผ๋ก ์ด๋์ํจ๋ค.๋ณต์ ๋๋ ์ง์ญ์ด
Avaliable/Unused์ง์ญ์ด๋ฉด ํด๋น ์ง์ญ์ ์ด์ Survivor์์ญ์ด ๋๊ณ ,Eden์์ญ์Avaliable/Unused์ง์ญ์ด ๋๋ค.
Major GC(Full GC)
์์คํ ์ด ๊ณ์ ์ด์๋๋ค๊ฐ ๊ฐ์ฒด๊ฐ ๋๋ฌด ๋ง์ ๋น ๋ฅด๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ ์ ์์ ๋
Major GC๊ฐ ์คํ๋๋ค.๊ธฐ์กด์ ๋ค๋ฅธ GC ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋
Heap์์ญ์์ GC๊ฐ ์ํ๋์ด, ์ฒ๋ฆฌ ์๊ฐ์ด ์๋นํ ์ค๋ ๊ฑธ๋ ธ๋ค.ํ์ง๋ง G1 GC๋ ์ด๋ ์์ญ์ ๊ฐ๋น์ง๊ฐ ๋ง์ ์ง๋ฅผ ์๊ณ ์๊ธฐ ๋๋ฌธ์ GC๋ฅผ ์ํํ ์ง์ญ์ ์กฐํฉํ์ฌ ํด๋น ์ง์ญ์ ๋ํด์๋ง GC๋ฅผ ์ํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ์์ ์
Concurrentํ๊ฒ(๋์์) ์ํ๋๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ฐ๋ ์ต์ํํ ์ ์๋ ๊ฒ์ด๋ค.
๊ผฌ๋ฆฌ ์ง๋ฌธ
์๋ฐ๋ฅผ ํ๋ฉด์ G1 GC๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๊ทธ ์ด์ ๋ ๋ฌด์์ผ๊น์?
๊ธฐ์กด ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ค๋ฅธ GC ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ์์ด์, ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ํ๊ฐํ๊ธฐ ์ ์ ๋ณ๊ฒฝํ์ง ์์ ์ ์๋ค.
G1 GC ์ ์ฑ๋ฅ์ด ๊ธฐ์กด ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋จ์ด์ ธ์ ์ฌ์ฉํ์ง ์์ ์ ์๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ํ ์๊ตฌ ์ฌํญ์ด ์์ด์ G1 GC๊ฐ ์ ํฉํ์ง ์์ ์ ์๋ค.
G1 GC๋
๊ณต๊ฐ ๋ถ์กฑ ์ํ(
Minor GC,Major GC๋ฅผ ์ํํ๊ณ ๋์๋ ์ฌ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ)๋ฅผ ์กฐ์ฌํด์ผ ํ๋ค.
์ด๋๋
Full GC๊ฐ ๋ฐ์ํ๋๋ฐ, ์ฑ๊ธ ์ฐ๋ ๋๋ก ๋์ํ๋ค.
Full GC๋ Heap ์ ๋ฐ์ ์ผ๋ก GC๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋ปํ๋ค.์์ Heap ๊ณต๊ฐ์ ๊ฐ์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ ์ฑ๋ฅ์ ๋ฐํํ์ง ๋ชปํ๊ณ Full GC๊ฐ ๋ฐ์ํ๋ค.
Humonogous์์ญ์ ์ ๋๋ก ์ต์ ํ๋์ง ์์ผ๋ฏ๋ก ํด๋น ์์ญ์ด ๋ง์ผ๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
Shenandoah GC

๋ ๋ํ์์ ๊ฐ๋ฐํ GC๋ก, Java 12 ์ release ๋๋ค.
๊ธฐ์กด CMS GC๊ฐ ๊ฐ์ง ๋จํธํ, G1 GC๊ฐ ๊ฐ์ง pause์ ์ด์๋ฅผ ํด๊ฒฐํ๋ค.
๊ฐ๋ ฅํ
Concurrency์ ๊ฐ๋ฒผ์ด GC ๋ก์ง์ผ๋ก Heap ์ฌ์ด์ฆ์ ์ํฅ์ ๋ฐ์ง ์๊ณ ์ผ์ ํ pause ์๊ฐ ์์๊ฐ ํน์ง์ด๋ค.
ZGC

Java 15์ release ๋ GC๋ก, ๋๋์ ๋ฉ๋ชจ๋ฆฌ(8MB ~ 16TB)๋ฅผ
low-latency(์ ์ง์ฐ)๋ก ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋์์ธ๋ GCG1 GC์
Region์ฒ๋ผ, ZGC๋ ZPage๋ผ๋ ์์ญ์ ์ฌ์ฉํ๋ฉฐ, G1 GC์Region์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ์ธ๋ฐ ๋นํด, ZPage๋ 2MB ๋ฐฐ์๋ก ๋์ ์ผ๋ก ์ด์๋๋ค.ํฐ ๊ฐ์ฒด๊ฐ ๋ค์ด์ค๋ฉด
2^๋ก ์์ญ์ ๊ตฌ์ฑํด์ ์ฒ๋ฆฌํ๋ค.
ZGC์ ๊ฐ์ฅ ํฐ ์ฅ์ ์
Heapํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๋๋ผ๋Stop The World์ ์๊ฐ์ด ์ ๋10ms๋ฅผ ๋์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ
Last updated