Java๋ ํ๋ก๊ทธ๋จ ์ฝ๋์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํ์ฌ ํด์ ํ์ง ์๋๋ค. ๋ฐ๋ผ์ ํด๋น ๊ฐ์ฒด๋ฅผ null๋ก ์ง์ ํ๊ฑฐ๋ System.gc() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ์ง์ํด์ผ ํ๋ค. ํนํ, System.gc()๋ ์์คํ
์ ์ฑ๋ฅ์ ๋งค์ฐ ํฐ ์ํฅ์ ๋ผ์น๋ฏ๋ก ์ ๋๋ก ์ฌ์ฉํด์ ์ ๋๋ค.
๋ฐ๋ผ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ ์ด์ ํ์ ์๋ ์ฐ๋ ๊ธฐ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์ง์ฐ๋ ์์
์ ์ํํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์๋ ๋ ๊ฐ์ง ์ ์ ์กฐ๊ฑด ํ์ ๋ง๋ค์ด์ก๋ค.
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅ(unreachable) ์ํ๊ฐ ๋๋ค.
- ์ค๋๋ ๊ฐ์ฒด์์ ์ ์ ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ์์ฃผ ์ ๊ฒ ์กด์ฌํ๋ค.

โ
Minor GC
- Young ์์ญ์์ ์ผ์ด๋๋ GC
- ์๋ก ์์ฑ๋ ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ Eden ์์ญ์ ์์น
- Eden ์์ญ์์ GC๊ฐ ํ ๋ฒ ๋ฐ์ํ ํ ์ด์๋จ์ ๊ฐ์ฒด๋ Survivor ์์ญ ์ค ํ๋๋ก ์ด๋
- ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ๊ณ์ํด์ ์ด์๋จ์ ์๋ ๊ฐ์ฒด๋ ์ผ์ ์๊ฐ ์ฐธ์กฐ๋๊ณ ์๋ค๋ ๋ป์ด๋ฏ๋ก Old ์์ญ์ผ๋ก ์ด๋
โ
Major(Full) GC
- Old ์์ญ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ค์ ๊ฒ์ฌํ์ฌ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ค์ ํ๊บผ๋ฒ์ ์ญ์
- ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ์คํ ์ค ํ๋ก์ธ์ค๊ฐ ์ ์ง๋๋ค. โ
stop-the-world
- GC๋ฅผ ์คํํ๋ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ค๋ ๋(์คํ ์ค ํ๋ก์ธ์ค)๊ฐ ์ ์ง๋๋ค. GC ์์
์ ์๋ฃํ ์ดํ์ ์ค๋จํ๋ ์์
์ ๋ค์ ์์ํ๋ค.
GC ํ๋
: stop-the-world ์๊ฐ์ ์ค์ด๋ ๊ฒ
ย
โ
GC๋ ์ด๋ค ์๋ฆฌ๋ก ์๋ฉธ์ํฌ ๋์์ ์ ์ ํ๋๊ฐ?
- Garbage Collector๊ฐ ํ ๋ด์ ๊ฐ์ฒด ์ค ๊ฐ๋น์ง(Garbage)๋ฅผ ์ฐพ์๋ด๊ณ ์ฐพ์๋ธ ๊ฐ๋น์ง๋ฅผ ์ฒ๋ฆฌํด์ ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
- ์ฐธ์กฐ๋๊ณ ์์ง ์์ ๊ฐ์ฒด(instance)๋ฅผ ๊ฐ๋น์ง๋ผ๊ณ ํ๋ฉฐ, ๊ฐ์ฒด๊ฐ ๊ฐ๋น์ง์ธ์ง ์๋์ง ํ๋จํ๊ธฐ ์ํด์
reachability
๋ผ๋ ๊ฐ๋
์ ์ฌ์ฉํ๋ค
- reachability: ์ด๋ค ํ ์์ญ์ ํ ๋น๋ ๊ฐ์ฒด๊ฐ ์ ํจํ ์ฐธ์กฐ๊ฐ ์๋ค
- unreachability: ๊ทธ๋ ์ง ์๋ค
- ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉด์ ์ฐธ์กฐ ์ฌ์ฌ์ด ํ์ฑ๋๋๋ฐ, ์ด ์ค ์ต์ด์ ์ฐธ์กฐํ ๊ฒ์
Root Set
์ด๋ผ๊ณ ํ๋ค.
- ํ ์์ญ์ ์๋ ๊ฐ์ฒด๋ค์ ์ด 4๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํ ์ฐธ์กฐ๋ฅผ ํ๊ฒ ๋๋ค. 2, 3, 4๋ Root Set์ด๋ค.
- ํ ๋ด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ ์ฐธ์กฐ
- Java ์คํ, ์ฆ Java ๋ฉ์๋ ์คํ ์ ์ฌ์ฉํ๋ ์ง์ญ๋ณ์์ ํ๋ผ๋ฏธํฐ๋ค์ ์ํ ์ฐธ์กฐ
- ๋ค์ดํฐ๋ธ ์คํ์ ์ํด ์์ฑ๋ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ
- ๋ฉ์๋ ์์ญ์ ์ ์ ๋ณ์์ ์ํ ์ฐธ์กฐ

- ๊ฐ๋น์ง ์ปฌ๋ ์
์คํ ํ์ด๋ฐ์ ๋ณ๋์ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ์ด ๋๋ค
ย
โ
GC ์๊ณ ๋ฆฌ์ฆ
๐ Serial GC
- ๋ฉ๋ชจ๋ฆฌ์ CPU ์ฝ์ด ๊ฐ์๊ฐ ์ ์ ๋ ์ ํฉํ ๋ฐฉ์
- Young ์์ญ โ Minor GC ๋ฐฉ์
- Old ์์ญ โ
mark-sweep-compact
- Old ์์ญ์ ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณ(
Mark
)
- ํ์ ์ ๋ถ๋ถ๋ถํฐ ํ์ธํ์ฌ ์ด์ ์๋ ๊ฐ์ฒด๋ง ๋จ๊ธด๋ค. (
Sweep
)
- ๊ฐ ๊ฐ์ฒด๋ค์ด ์ฐ์๋๊ฒ ์์ด๋๋ก ํ์ ๊ฐ์ฅ ์ ๋ถ๋ถ๋ถํฐ ์ฑ์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ๊ณผ ๊ฐ์ฒด๊ฐ ์๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ค. (
Compaction
)
๐ Parallel GC (Throughput GC)
- Serial GC์ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ง๋ง, GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ฐ๋ ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ด๋ค.
- Serial GC๋ณด๋ค ๋น ๋ฅด๊ฒ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ๊ณ ์ฝ์ด์ ๊ฐ์๊ฐ ๋ง์ ๋ ์ ํฉํ๋ค.
๐ Parallel Old GC (Parallel Compacting GC)
- Parallel GC์์ Old ์์ญ์ ์๊ณ ๋ฆฌ์ฆ๋ง ๋ค๋ฅธ ๋ฐฉ์ โ
mark-summary-compaction
Summary
: ๋ณ๋๋ก ์ด์์๋ ๊ฐ์ฒด๋ฅผ ์๋ณํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ, ๋ณด๋ค ๋ณต์กํ ๋จ๊ณ๋ก ์ํ๋๋ค.
๐ Concurrent Mark & Sweep GC (CMS, Low Latency GC)
- stop-the-world ์๊ฐ์ด ๋งค์ฐ ์งง๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ต ์๋๊ฐ ๋งค์ฐ ์ค์ํ ๋ ์ฌ์ฉํ๋ค.
- ๊ณผ์
- Initial Mark : ํด๋์ค ๋ก๋์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ฒด ์ค ์ด์ ์๋ ๊ฐ์ฒด๋ง ์๋ณ
- Concurrent Mark : ๋ฐฉ๊ธ ์ด์ ์๋ค๊ณ ํ์ธํ ๊ฐ์ฒด์์ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ฒด๋ค์ ๋ฐ๋ผ๊ฐ๋ฉฐ ํ์ธ. ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์คํ ์ค์ธ ์ํ์์ ๋์์ ์งํ๋๋ค!
- Remark: concurrent mark ๋จ๊ณ์์ ์๋ก ์ถ๊ฐ๋๊ฑฐ๋ ์ฐธ์กฐ๊ฐ ๋๊ธด ๊ฐ์ฒด๋ฅผ ํ์ธ
- Concurrent Sweep: ์ฐ๋ ๊ธฐ ์ ๋ฆฌ. ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์งํ๋๊ณ ์๋ ์ํฉ์์ ์งํ
- ๋จ์
- ๋ฉ๋ชจ๋ฆฌ์ CPU๋ฅผ ๋ง์ด ์ฌ์ฉ
- Compaction ๋จ๊ณ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ง ์๋๋ค.
๐ G1 (Garbage First) GC

- ๋ฐ๋ํ์ ๊ฐ ์์ญ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ GC๋ฅผ ์คํํ๋ค.
- ํด๋น ์์ญ์ด ๊ฝ ์ฐจ๋ฉด ๋ค๋ฅธ ์์ญ์์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ GC๋ฅผ ์คํํ๋ค.
- ์ฆ, Young ์์ญ์์ Old์์ญ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๋ ๋จ๊ณ๊ฐ ์ฌ๋ผ์ง ๋ฐฉ์์ด๋ค.
- ๊ฐ์ฅ ๋น ๋ฅธ GC ๋ฐฉ์
ย
[์ถ์ฒ]
https://d2.naver.com/helloworld/1329
https://asfirstalways.tistory.com/159