[Java] Garbage Collector๋?
๐ย GC(Garbage Collector)๋?
Garbage Collector
๋ JVM์ด Heap ์์ญ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ํ์งํ๊ณ ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ํ์ง ์์๋ ๋๋ค.
๐ย JVM์์ Heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- Young Generation
- Eden Space: ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ๋๋ถ๋ถ ์ด ๊ณต๊ฐ์ ์ ์ฅ๋๋ค.
- Survivor Spaces: Eden Space์์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ด๋ค.
- Young Generatiob์์๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํ๋ฉฐ
Minor GC
๊ฐ ์์ฃผ ๋ฐ์ํ๋ค.
- Old Generation
- Young Generation์์ ์ฌ๋ฌ ๋ฒ์ Minor GC๋ฅผ ๊ฑฐ์ณ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ์ด๋ค.
- Young Generation๋ณด๋ค ํฌ๊ธฐ๊ฐ ํฌ๋ฉฐ
Major GC
๊ฐ ๋ฐ์ํ๋ฉด ์ด ๊ณต๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ฉธ๋๋ค.
- Permanent Generation
- Java 8 ์ด์ ์ ์กด์ฌํ๋ ๊ณต๊ฐ์ด๋ค. ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ์ static ๋ณ์๊ฐ ์ ์ฅ๋์๋ค. Java 8๋ถํฐ
Metaspace
๋ผ๋ ๋ณ๋์ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก ๋์ฒด๋์๋ค. - ์ด ๊ณต๊ฐ์ ํ์ด ์๋๋ค.
- Java 8 ์ด์ ์ ์กด์ฌํ๋ ๊ณต๊ฐ์ด๋ค. ํด๋์ค์ ๋ฉํ๋ฐ์ดํฐ์ static ๋ณ์๊ฐ ์ ์ฅ๋์๋ค. Java 8๋ถํฐ
๐ย Major GC์ Minor GC
์์์ ๋ฑ์ฅํ Major GC์ Minor GC์ ๋ํด ๋ ์์ธํ ์์๋ณด์.
Major GC
Major GC๋ Old Generation์์ ๋ฐ์ํ๋ค. Old Generation์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ ํธ๋ฆฌ๊ฑฐ๋๋ค. ์ ์ฒด ํ ๋๋ Old Generation์ ๋์์ผ๋ก ํ๋ฏ๋ก Minor GC์ ๋นํด ์ํ ์๊ฐ์ด ๊ธธ๊ณ , ์ ํ๋ฆฌ์ผ์ด์
์ ์ค๋จ ์๊ฐ์ด ๋ ๊ธธ๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ์ค๋จ ํ์์ Stop the World
ํ์์ด๋ผ๊ณ ํ๋๋ฐ, ๋ค์ ํ์ ํ๋ค.
Minor GC
Minor GC๋ Young Generation์์ ๋ฐ์ํ๋ค. Eden ๊ณต๊ฐ์ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํ์ฌ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๊ณ ์ด์๋จ์ ๊ฐ์ฒด๋ Survivor ๊ณต๊ฐ์ผ๋ก ์ด๋์ํจ๋ค. Survivor ๊ณต๊ฐ์ด ๊ฐ๋ ์ฐจ๋ฉด ์ด์๋จ์ ๊ฐ์ฒด๋ ๋ค๋ฅธ Survivor ๊ณต๊ฐ์ผ๋ก ์ด๋ํ๊ฑฐ๋ ์ฌ๋ฌ ๋ฒ์ Minor GC๋ฅผ ์ด์๋จ์ ๊ฒฝ์ฐ Old Generation์ผ๋ก ์น๊ฒฉ๋๋ค. Younger Generation์ ๋์์ผ๋ก ํ๋ฏ๋ก ์ํ ์๊ฐ์ด ์งง๊ณ Stop-the-World ํ์์ด ๋ฐ์ํ๋ ๊ทธ ์ํฅ์ด ํฌ์ง ์๋ค.
ํ๋ก ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๊ตฌ๋ถ | ๋์ ๊ณต๊ฐ | ํธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด | ์ํ ์๊ฐ | ์ํฅ |
---|---|---|---|---|
Minor GC | Younge Generation | Eden ์์ญ์ด ๊ฐ๋ ์ฐผ์ ๋ | ์งง์ | ์ํฅ ์ ์ |
Major GC | Old Generation | Old ์์ญ์ด ๊ฐ๋ ์ฐผ์ ๋ | ๊น | ์์คํ ์ฑ๋ฅ์ ์ํฅ ํผ |
๐ย ๋์ ๋ฐฉ์
Stop the World
Stop the World๋ GC๋ฅผ ์คํํ๊ธฐ ์ํด JVM์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ฐ๋ ๋๋ฅผ ์ผ์์ ์ผ๋ก ์ค์ง์ํค๋ ํ์์ด๋ค. GC ์์ ์ด ๋๋๋ฉด ๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ค.
๋ชจ๋ ์ฐ๋ ๋๋ฅผ ๋ฉ์ถ๋ ์ด์ ๊ฐ ๋ฌด์์ผ๊น? ๋ฉ๋ชจ๋ฆฌ ์์์ ๊ฐ์ฒด์ ์ฐธ์กฐ ๊ด๊ณ๊ฐ ๋ณํ์ง ์๋๋ก ๋ณด์ฅํด ์ด์์๋ ๊ฐ์ฒด์ ์ฃฝ์ ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฒ ์๋ณํ๊ธฐ ์ํจ์ด๋ค. GC๊ฐ ์คํ๋๋ ๋์ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ค๊ณ ์๊ฐํด๋ณด์. ์ฌ๋ฐ๋ฅธ ๊ฐ์ฒด ์๋ณ์ด ์ด๋ ค์ธ ๊ฒ์ด๋ค.
Stop the World๋ GC์ ์ฑ๋ฅ๊ณผ ์ง๊ฒฐ๋๋ฉฐ, ์ด ๋จ๊ณ์ ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด GC ํ๋์ ์ํํ๊ธฐ๋ ํ๋ค. ์ต์ GC ์๊ณ ๋ฆฌ์ฆ์ Stop the World ์๊ฐ์ ์ค์ด๊ธฐ ์ํด ๋๋ถ๋ถ์ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋จ๊ณผ ๋์์ ์ฒ๋ฆฌํ๊ณ ๊ผญ ํ์ํ ์๊ฐ์๋ง ์งง๊ฒ Stop the World๋ฅผ ๋ฐ์์ํค๋๋ก ์ค๊ณ๋์ด ์๋ค.
Mark and Sweep
Mark and Sweep์ Mark
์ Sweep
๋จ๊ณ๋ก ๋๋๋ค.
Mark ๋จ๊ณ์์ ์ฐ์ ๋ชจ๋ ๊ฐ์ฒด์ mark bit
๋ฅผ ์ด๊ธฐํํ๋ค. GC Root
๋ถํฐ ์ฐธ์กฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ ์ด์์๋ ๊ฐ์ฒด๋ฅผ ํ์ํ๊ณ , ํ์ ๊ณผ์ ์์ ์ด์์๋ ๊ฐ์ฒด์ mark bit๋ฅผ ์ค์ ํ๋ค. ํ์์ด ์๋ฃ๋๋ฉด, mark bit๊ฐ ์ค์ ๋ ๊ฐ์ฒด๋ ์ด์์๋ ๊ฐ์ฒด, ๊ทธ๋ ์ง ์์ ๊ฐ์ฒด๋ ์ฃฝ์ ๊ฐ์ฒด๊ฐ ๋๋ค.
GC root๋ GC์์ ๊ฐ์ฒด์ ์์กด ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํ ๊ธฐ์ค์ ์ด ๋๋ ๊ฐ์ฒด ์งํฉ์ด๋ค.
Sweep ๋จ๊ณ์์ GC๋ ํ ์ ์ฒด๋ฅผ ๋ค์ ์ํํ์ฌ mark bit๊ฐ ์ค์ ๋์ง ์์ ์ฆ, ์ฃฝ์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋ค.
Mark and Sweep ๋ฐฉ๋ฒ์ ๊ตฌํ์ด ๋จ์ํ๊ณ ํจ๊ณผ์ ์ด๋ Sweep ๋จ๊ณ ์ดํ ๋ฉ๋ชจ๋ฆฌ์ ๋น ๊ณต๊ฐ์ด ๋ถ๊ท์นํ๊ฒ ๋จ์ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ผ๋ถ GC ์๊ณ ๋ฆฌ์ฆ์ Sweep ๋จ๊ณ ์ดํ Compaction
๋จ๊ณ๋ฅผ ์ถ๊ฐํ์ฌ ์ฐ์๋ ์ฌ์ ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ๋ ํ๋ค.
๐ย GC์ ์๊ณ ๋ฆฌ์ฆ
Serial GC
๋จ์ผ ์ฐ๋ ๋์์ ๋ชจ๋ GC ์์ ์ ์ํํ๋ค. Stop the World ๋ฐฉ์์ ์ฌ์ฉํ๋ฏ๋ก ์ฐ๋ ๋๊ฐ ๋ฉ์ถ๋ ์๊ฐ์ด ๊ธธ ์ ์๋ค. CPU ์ค๋ฒํค๋๊ฐ ์ ๊ณ ๊ตฌํ์ด ๊ฐ๋จํ๋ฉฐ ์์ธก ๊ฐ๋ฅํ ๋์์ ๋ณด์ฅํ์ง๋ง ๋ฉํฐ์ฐ๋ ๋ ํ๊ฒฝ์ด๋ ๊ท๋ชจ๊ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์๋ ๋ถ์ ํฉํ๋ค.
Parallel GC
Serial GC์ ๋ฌ๋ฆฌ ์ฌ๋ฌ ์ฐ๋ ๋๋ฅผ ํ์ฉํ์ฌ Young/Old Generation์์์ GC ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ GC์ ์ค๋ฒํค๋๋ฅผ ์๋ฏธ ์๊ฒ ์ค์ผ ์ ์๋ค.
Parallel Old GC
Old Generation ์ ์ฉ Parallel GC์ด๋ค.
CMS(Concurrent Mark Sweep) GC
์ ๋ต ์๋๊ฐ ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์ค๊ณ๋ low latancy GC์ด๋ค. Stop the World ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ์ฃผ์ ๋ชฉํ์ด๋ฉฐ, Mark and Sweep ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๋ ๋์ ๋์์ ์งํํ์ฌ ์ฐ๋ ๋๊ฐ ๋ฉ์ถ๋ ์๊ฐ์ ์ค์ธ๋ค. ๊ทธ๋ฌ๋ CPU ์ฌ์ฉ๋์ด ๋๊ณ ๋ฉ๋ชจ๋ฆฌ ๋จํธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
G1(Garbage First) GC
๋์ฉ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฉํฐํ๋ก์ธ์ ํ๊ฒฝ์ ์ํด ์ค๊ณ๋ ์๋ฒ์ฉ GC์ด๋ค. ํ์ ์๋ฐฑ ๊ฐ์ ์์ ๊ณต๊ฐ์ผ๋ก ๋๋๊ณ , ๊ฐ ๊ณต๊ฐ์ garbage ๋น์จ์ ์ถ์ ํ์ฌ ๋ง์ garbage๊ฐ ์๋ ๊ณต๊ฐ๋ถํฐ ์ฒ๋ฆฌํ๋ค. ๋๋ถ๋ถ์ ์์ ์ parellel ๋ฐ concurrentํ๊ฒ ์ฒ๋ฆฌํ๋ค.
Shenandoah
๊ท๋ชจ๊ฐ ์์ GC ์์ ์ ์์ฃผ ์ฌ์ฉํ์ฌ ์ฐ๋ ๋๊ฐ ๋ฉ์ถ๋ ์๊ฐ์ ์ผ์ ํ๊ฒ ์ ์งํ๋ ๊ฒ์ด ๋ชฉํ์ด๋ค. G1 GC์ ์ ์ฌํ๊ธฐ ํ์ ์ฌ๋ฌ ๊ณต๊ฐ์ผ๋ก ๋๋์ง๋ง generation์ ๊ตฌ๋ถํ์ฌ ๋๋์ง ์๋๋ค.
ZGC
์ต๋ 16TB์ ์ด๋์ฉ๋ ํ์์๋ ๋งค์ฐ ์งง์ ์ฐ๋ ๋ ์ ์ง ์๊ฐ์ ๋ณด์ฅํ๋ low latency GC์ด๋ค. CPU ์์์ ๋ ๋ง์ด ์ฌ์ฉํ์ง๋ง ์ฐ๋ ๋ ์ ์ง ์๊ฐ์ด ๊ทน๋๋ก ์งง๋ค. ๋ ๋ฐ์ ๋ GC์ธ Generational GC๋ Young, Old Generation์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๋ฆฌํ์ฌ ํจ์จ์ฑ์ ๋์ธ๋ค.
๐ย ์ฐธ๊ณ
https://velog.io/@recordsbeat/Garbage-Collector-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%95%8C%EA%B8%B0
https://mangkyu.tistory.com/118
https://mangkyu.tistory.com/119