-
Garbage Collector ์ด์ผ๊ธฐ - ์ ์, ์, ์ธ์ , ์ด๋ป๊ฒ, ์๊ณ ๋ฆฌ์ฆ, ์ข ๋ฅ๊ฐ๋ฐ/Java 2022. 4. 11. 23:21
์ข์ ๊ฐ๋ฐ์๋ "๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ" ๋ํ ์ ํด์ผํ๋ค๊ณ ํฉ๋๋ค.
๊ทธ๋์ Java๋ฅผ ๊ณต๋ถํ๋ฉด์, ์ ๋ ๋นผ๋จน์ ์ ์๋ ๋ด์ฉ ์ค ํ๋๊ฐ ๊ฐ๋น์ง์ปฌ๋ ํฐ์ ๋๋ค.
JVM (Java Virtual Machine)์ ๋จผ์ ๊ณต๋ถํ๊ณ ์ค๋ฉด ๋ ๋์์ด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
JVM์ ๋ํ ๋ด์ฉ์ ์๋์ ๋งํฌ๋ก ์ค์๋ฉด ๋ฉ๋๋ค.
https://mong-dev.tistory.com/38
์ ์
Garbage Collector๋?
๋์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ์ฌ์ฉํ์ง ์๋ ์์ญ์ ํ์งํ์ฌ ํด์ ํ๋ ๊ธฐ๋ฅGC๋ ์ ์ผ์ด๋๋๊ฐ?
์ด๋ ต๊ฒ ์ค๋ช ํ๊ธฐ๋ณด๋ค, ์ฝ๊ฒ ์ค์ํ์ ์๋ฅผ ํตํด ์ ๊ทผํด๋ณด๊ฒ ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ํ ์ฃผ๋ฐฉ์ฅ์ด ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์ด ์ฃผ๋ฐฉ์ฅ์ ์๋ฆฌ๋ฅผ ํ ๋๋ง๋ค ๋์ฅ๊ณ ์์ ์์์ ๊บผ๋ด์ต๋๋ค. ๊ฐ์ ธ์จ ์์์ ํ ์ด๋ธ์ ๋๊ณ ์๋ฆฌ๋ฅผ ํฉ๋๋ค. ํ ์ด๋ธ์ด ์ฌ๋ฃ๋ค๋ก ๊ฐ๋ ์ฐจ๋ฉด ๊ทธ ๋ค์ ์๋ฆฌ๋ฅผ ์งํํ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด, ์๋ฆฌ๋ฅผ ํ๋ฉด์ ์ฌ์ฉํ์ง ์๋ ์ฌ๋ฃ๋ค์ ๊ทธ๋๊ทธ๋ ์น์์ฃผ๋๊ฒ ํจ์จ์ ์ผ ๊ฒ์ ๋๋ค.
๊ธฐ์กด์๋ ์ฃผ๋ฐฉ์ฅ์ด ์น์ฐ๋ ๊ฒ ๊น์ง ๋ชจ๋ ํ๋ํ๋ ๋ ์ํผ์ ๋ชจ๋ ์ ์ด์ฃผ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, 1. ์์ ์ ๊บผ๋ธ๋ค. 2. ์นผ์ ๊บผ๋ธ๋ค. 3. ์์ ์ ์๋ฅธ๋ค. 4. ์นผ์ ์น์ด๋ค. 5. ์์ ์ ์น์ด๋ค. ์ด๋ฐ์์ผ๋ก ๋ง์ ๋๋ค. ๊ทธ๋ฌ๋ค ํน์๋ผ๋ ์ค์๋ก ์์ ์ ์น์ฐ๋ ๊ฒ์ ์ ์ง ์๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ๊ณค ํ์ต๋๋ค. ํ์ง๋ง, ๊ทธ์๊ฒ ์์ฃผ ๋๋ํ ์กฐ์๊ฐ ๋ํ๋ฌ์ต๋๋ค. ์ฃผ๋ฐฉ์ฅ์ด ์ผ์ผ์ด ๋ ์ํผ์ ๋ฌด์์ ์น์์ผํ ์ง ์ ์ด์ฃผ์ง ์์๋, ๊ทธ ์กฐ์๋ ์ฃผ๋ฐฉ์ฅ์ด ๋ฌด์์ ์ฌ์ฉํ๋์ง ์ฒดํฌ๋ฅผ ํด๋๊ณ , ์ฌ์ฉํ์ง ์๋ ์ฌ๋ฃ๋ค์ ์์์ ์ ์น์ ๋์์ต๋๋ค. ์ฃผ๋ฐฉ์ฅ์ ํจ์ฌ ์ด ํ ์ด๋ธ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.
๋ณธ๋ก ์ผ๋ก ๋์์, ์ด ์ด์ผ๊ธฐ๋ฅผ ๋ค์ ํ๋ก๊ทธ๋๋ฐ์ ๋์ ํด๋ณด๊ฒ ์ต๋๋ค. ๋ ์ํผ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์ฝ๋๋ผ๊ณ ๊ฐ์ ํ์ ๋, ๊ธฐ์กด์ C์ธ์ด์์๋ ์ฒ์ ์ฃผ๋ฐฉ์ฅ์ด ๋ ์ํผ์ ์ผ์ผ์ด ๋ค ์ ์ด์ฃผ๋ฏ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํ ํด์ ๋ฅผ ์ง์ ์ฝ๋๋ก ์์ฑํด์ฃผ์ด์ผ๋ง ํ์ต๋๋ค. ํ์ง๋ง ์๋ฌด๋ฆฌ ์ ์คํ ์ฌ๋์ด๋๋ผ๋, ๊น๋นก ๋์น๊ณ ๋จ๊ฒจ ๋๋ ์ผ์ด ์๊ธฐ๊ธฐ ๋ง๋ จ์ ๋๋ค. ์ด๋ ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ ๋ฐ๋ก Memory Leak(๋ฉ๋ชจ๋ฆฌ ๋์)๋ผ๊ณ ํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ, C์ธ์ด์ ๋ฌ๋ฆฌ ์๋ฐ์๊ฒ๋ ์ฃผ๋ฐฉ์ฅ์ด ์์ฐ๋ ์นผ์ ์์์ ์น์์ฃผ๋ ๋๋ํ ์กฐ์๊ฐ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ฐ๋ก Garbage Collector (๊ฐ๋น์ง ์ปฌ๋ ํฐ)์ ๋๋ค. Garbage๋ '์ฐ๋ ๊ธฐ'๋ฅผ ์๋ฏธํ๋ ๋จ์ด์ ๋๋ค. ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฐ๋ ๊ธฐ๋ผ๊ณ ์๊ฐํ๋ฉด ํจ์ฌ ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ์์์ ๋งํ ๋์ ์ผ๋ก ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค ์ฌ์ฉํ์ง ์๋ ์์ญ์ ํ์งํ์ฌ ํด์ ํ๋ ๊ธฐ๋ฅ์ด๋ผ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๊ฐ๋ ์ ์๋ฏธ๊ฐ ์กฐ๊ธ ๋ ์๋ฟ์ผ์ค ๊ฒ ๊ฐ์ต๋๋ค.
GC๋ ์ด๋์์ ๋ฐ์ํ๋๊ฐ?
์ด ์ด์ผ๊ธฐ๋ฅผ ํ๊ธฐ ์ ์, ๋จผ์ JVM์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ์ ๋ํ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ํ๋ฒ ๋ ์ฌ๋ ค๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ํ์ฌ ๊ธ ์์ ๋งํฌ ๊ฑธ์ด๋์ ๊ณณ์ผ๋ก ์ด๋ํ์๋ฉด ๊ด๋ จ ๋ด์ฉ์ ํ์ธํ์ค ์ ์์ต๋๋ค. JVM์ ๋ํด ๊ธ์ ์์ฑํ๋ฉฐ ์ ๊น ์ธ๊ธํ ์ ์ด ์์๋๋ฐ, JVM์ ์ญํ ์ค ํ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ด๊ณ , ๊ทธ ์ญํ ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ด๋นํ๊ณ ์๋ค๊ณ ํ์ต๋๋ค.
์ฌ๊ธฐ์์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ Execution Engine์ด๋ผ๋ ๊ณณ์ ์์ต๋๋ค.
์ด๋ฌํ GC(Garbage Collection)๋ Heap ๋ฉ๋ชจ๋ฆฌ์์ ํ๋์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ Heap์ ๊ตฌ์กฐ์ ๋ํด์๋ ๋น์ฐํ ๋ณด์์ผ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํฌ๊ฒ Young Generation, Old Generation์ด๋ผ๋ 2๊ฐ๋ก ๋๋ ๊ฒ์ ๋ณผ ์ ์๋๋ฐ, ์ด๊ฒ์ '์ฝํ ์ธ๋ ๊ฐ์ค(weak generational hypothesis)'๋ผ๋ ๊ฐ์ค์ ๊ธฐ๋ฐ์ ๋๊ณ ์๋ค๊ณ ํฉ๋๋ค.
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅ(Unreachable)ํ ์ํ๊ฐ ๋๋ค.
- ์ค๋๋ ๊ฐ์ฒด์์ ์ ์ ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ์์ฃผ ์ ๊ฒ ๋ฐ์ํ๋ค.์ฒซ๋ฒ์งธ ๊ฐ์ ์ ๋ณด๊ฒ ์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ์ค๊ดํธ({})์์์ ์์ฑ์ ํ๊ณ , ์ด ๊ฐ์ฒด๋ค์ ๊ดํธ๊ฐ ๋๋๋ ์์ ์์ ๋์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ํน์ํ ๊ฒฝ์ฐ์๋ ์ค๋ ์ฌ์ฉํ ์ ์์ง๋ง, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ unreachableํ ์ํ๊ฐ ๋์ด GC์ ๋์์ด ๋ฉ๋๋ค.
๋๋ฒ์งธ ๊ฐ์ ์ ๋ณด๋ฉด, ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด๋ ์์ฐจ์ ์ธ ๋ก์ง์ ์ํด ์์ฑํ์ฌ ํ์ฉ์ ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์์ ์์ฑ๋ ๊ฐ์ฒด๋ ๊ทธ ๋ค์์ ๋ก์ง์์ ์ฌ์ฉ๋ ์ดํ ๋๋ถ๋ถ ์ฌ์ฉ๋์ง ์๊ฒ ๋ฉ๋๋ค. ์ด๋ฐ ํน์ฑ์ผ๋ก ์ธํด ๋์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด์ ๋ํด GC๋ฅผ ํ ์ ์๊ฒ ๋๋ค๋ ๊ฒ์ ๋๋ค.
GC๋ผ๋ ๊ฒ์ ๊ฒฐ๊ตญ Heap Area์์ ๋์ด์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ค๋ ๊ฒ์ธ๋ฐ์, ์ ํต์ ์ธ Heap Area๋ ์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , Eden, Survivor0, Survivor1, Old Generation์ผ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. (Permanent Generation์ Java 8๋ฒ์ ๋ถํฐ Native Method Stack์ ํธ์ )
์ด๋ ๊ฒ GC๋ ๊ฐ ์์ญ์ ํ์ฉํ์ฌ ์ต์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ํ๊ฒ ๋ฉ๋๋ค.
GC๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
1. ๋งจ์ฒ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด Eden ์์ญ์ ์์ฑ๋ฉ๋๋ค.
2. Eden์์ญ์ด ์ฐจ๋ฉด, ๋ฏธ์ฌ์ฉ ๊ฐ์ฒด์ ์ ๊ฑฐ์ ํจ๊ป ์์ง ์ฌ์ฉ๋๊ณ ์๋ ๊ฐ์ฒด๋ Survivor0, Survivor1 ์์ญ์ผ๋ก ์ด๋์ํต๋๋ค. ์ด๊ฒ์ Minor GC๊ฐ ๋ฐ์ํ๋ค๊ณ ํ๋ ๊ฒ์ ๋๋ค. (๋จ, ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ Survivor ์์ญ์ ํฌ๊ธฐ๋ณด๋ค ํด ๊ฒฝ์ฐ์๋ ๋ฐ๋ก Old Generation์ผ๋ก ์ด๋ํฉ๋๋ค.)
3. ์ฐธ๊ณ ๋ก Survivor0์ Survivor1 ์์ญ์ ๋ ์ค ํ๊ณณ์๋ง ๊ฐ์ฒด๊ฐ ์กด์ฌํ๊ฒ๋ ์ด์๋๋ฉฐ, ๋ค๋ฅธ ํ ๊ณณ์ ๋น์ด์ ธ ์์ด์ผํฉ๋๋ค. ๋ณดํต From, To๋ก ๊ตฌ๋ถ์ ํ๋ฉฐ, ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ Survivor์์ญ(From)์ด ๊ฐ๋ ์ฐจ๋ฉด ๋ค๋ฅธ Survivor ์์ญ(To)๋ก ๋ณด๋ด๊ณ , ๊ธฐ์กด์ From์ ๋น์ฐ๋ ์์ ์ ์งํํฉ๋๋ค.
์ดํด๊ฐ ์ด๋ ค์ฐ์ค ์๋ ์์ผ๋ ์์ฃผ ๊ฐ๋จํ๊ฒ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. (์ดํด๋ฅผ ๋๊ธฐ ์ํ ์์ ๋๋ค)
eden์์ญ์ด ๊ฝ์ฐจ๊ณ , Survivor0์ผ๋ก ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์ด๋ํจ์ ๋ฐ๋ณตํ๋ค๊ฐ, Survivor0์ด ๊ฝ ์ฐจ๊ฒ ๋์์๋, ์ฌ๊ธฐ์๋ GC๊ฐ ์ผ์ด๋ ๊ฒ์ด๊ณ , ๊ฑฐ๊ธฐ์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ ์ด๋ฒ์๋ Survivor1์ผ๋ก ์ด๋ํ ๊ฒ์ ๋๋ค. ์ด๋ํ๋ฉด์ score๊ฐ์ด ์ฆ๊ฐํ๊ฒ๋ฉ๋๋ค. ๋จ์ํ๊ฒ ์๊ฐํด๋ณด์๋ฉด, ์๋ฅผ๋ค์ด Minor GC๋ฅผ ํตํด ์ด์๋จ์ ๊ฐ์ฒด์ Survivor0์์์ ์ค์ฝ์ด๊ฐ 0์ด๋ผ๊ณ ๊ฐ์ ํ์ ๋, Survivor1์ผ๋ก ์ด๋ํ๋ฉด์ ๊ทธ ์ค์ฝ์ด๊ฐ 1๋ก ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด, Minor GC๊ฐ ๋ฐ์ํ๊ณ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ Survivor์ ๋ ์์ญ์ค์์ ์ด๋ฏธ ์ฌ์ฉ์ค์ธ ๊ณณ์ผ๋ก ์์ด๊ฒ ๋ ๊ฒ์ ๋๋ค. ํ ๊ณณ์ ๋น์๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด์ฃ . ๊ทธ๋ผ Minor GC๋ฅผ ํตํด ์๋กญ๊ฒ Survivor1์ ๋ค์ด์ค๋ ์์ญ์ ์ค์ฝ์ด ๊ฐ์ด 1์ด ์๋ 0์ผ ๊ฒ์ ๋๋ค. (์ค์ฝ์ด๊ฐ ๋์์๋ก ์งํ๊ฒ ํ์ํ์ต๋๋ค.) ๊ทธ๋ผ ํ Survivor์์ญ์์ score๊ฐ์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ด ํผ์ฌํ๊ณ ์๊ฒ ์ต๋๋ค.
์ ๊ณผ์ (1~3)์ ๋ฐ๋ณตํ๋ค๋ณด๋ฉด, Survivor์์ญ์์ ๊ณ์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์๊ฒ ์ผ์ score๊ฐ ๋์ ์ด ๋์ด ๊ธฐ์ค์น ์ด์์ด ๋๋ฉด Old Generation ์์ญ์ผ๋ก ์ด๋์ ํ๊ฒ ๋ฉ๋๋ค. ์ด ๊ณผ์ ์ Promotion์ด๋ผ๊ณ ํฉ๋๋ค.
5. Old Generation ์์ญ์์ ์ด์๋จ์๋ ๊ฐ์ฒด๋ค์ด ์ผ์ ์์ค ์์ด๊ฒ ๋๋ฉด, ๋ฏธ์ฌ์ฉ์ผ๋ก ํ๋จ๋ ๊ฐ์ฒด๋ค์ ์ ๊ฑฐํด์ฃผ๋ Major GC๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๊ณผ์ ์์ STW๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ๊ธฐ์ STW๊ฐ ๋ฌด์์ธ์ง ์ ์ ์ธ๊ธํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
STW๋ Stop The World์ ์ฝ์๋ก, GC๋ฅผ ์ํํ๊ธฐ ์ํด JVM์ด ๋ฉ์ถ๋ ํ์์ ์๋ฏธํฉ๋๋ค. GC๊ฐ ์๋ํ๋ ๋์ GC๊ด๋ จ Thread๋ฅผ ์ ์ธํ ๋ชจ๋ Thread๊ฐ ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๋ฏ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ์ ์ง๋๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ์์ ์ด ์คํ๋์ง ์๊ณ , ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค. ๊ทธ๋์ ์ ์ ํ ๋น๋์ GC ๊ฐ ์คํ๋๋๋ก ํ์ฌ, Stop-The-World ์๊ฐ์ ์ค์ฌ ์ฐ๋ ๋๊ฐ ์ ์ง๋๋ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด ์ค์ํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก 'ํ๋'์ด๋ผ๋ ๊ฒ์ ์ด ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฌ๊ธฐ๊น์ง GC๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์์๋ณด์์ต๋๋ค. GC์๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ต๋๋ค. ๊ทธ ์ข ๋ฅ๋ฅผ ์์๋ณด๊ธฐ ์ , ๊ฐ๊ฐ์ GC๋ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ๊ทธ๊ฒ์ ๋ํด ๋จผ์ ์์๋ณด๊ฒ ์ต๋๋ค.
GC ์๊ณ ๋ฆฌ์ฆ
GC๋ ๊ธฐ๋ณธ์ ์ผ๋ก Garbage ๋์์ ์๋ณํ๊ณ ๊ทธ ๋์์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ธฐ๋ณธ ๋์๊ณผ ๊ด๋ จ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋์ ๊ฐ์ด ์์ต๋๋ค.
Reference Counting Algorithm
- ๊ฐ ๊ฐ์ฒด๋ง๋ค Reference Count๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์ด ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด GC๋ฅผ ์ํ
- ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ
- ์ํ ์ฐธ์กฐ ๊ตฌ์กฐ์์ Reference Count๊ฐ 0์ด ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ Memory Leak์ด ๋ฐ์
Mark-and-Sweep Algorithm
- Reference Counting Algorithm์ ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋์จ ์๊ณ ๋ฆฌ์ฆ
- RSet(Root Set)์์ Reference๋ฅผ ์ถ์ ํ์ฌ ์ฐธ์กฐ ์ํฉ์ ํ์
- Mark ๋จ๊ณ์์ Garbage๋์์ด ์๋ ๊ฐ์ฒด๋ฅผ ๋งํนํ๊ณ , Sweep ๋จ๊ณ์์ ๋งํน๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ง์
- ์ ๋จ๊ณ๋ฅผ ๋ง์น ํ ๋งํน ์ ๋ณด๋ฅผ ์ด๊ธฐํ
- ์ด ๋ฐฉ์์ GC๊ฐ ๋์ํ๊ณ ์์ ๊ฒฝ์ฐ, Mark ์์ ๊ณผ ์ดํ๋ฆฌ์ผ์ด์ Thread์ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด Heap์ ์ฌ์ฉ์ด ์ ํ ๋จ
- Compaction ์์ ์ด ์์ด ๊ทธ ์ฌ์ด์ฌ์ด์ ๋น์ด์๋ ๊ณต๊ฐ์ ์ฌ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด, ๋ค์ ์ฌ์ฉํ ๋ ค๊ณ ํ๋ ์์ญ๋ณด๋ค ๊ฐ์ฒด์ ํฌ๊ธฐ๊ฐ ๋ ํด ๊ฒฝ์ฐ (์ฆ, ๋น์ด์๋ ๊ณต๊ฐ์ด ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ), Out of Memory๊ฐ ๋ฐ์ํ ์ ์์
Mark-and-Compact Algorithm
- ๊ธฐ์กด์ mark and sweep ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ํ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์ฐ(fragmentation)์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ์๊ณ ๋ฆฌ์ฆ
- Sweep ์์ ์ดํ์ Compact ์์ ์ด ์ถ๊ฐ๋์ด ํฉ์ด์ ธ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ์์ฃผ๋ ์์ ์ ์งํ
- Compact์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋์ผ ์ ์์
- ํ์ง๋ง Compact์์ ๊ณผ ๊ทธ ์ดํ Reference๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ์์ ์ผ๋ก ์ธํด ์ค๋ฒํค๋(Overhead)๊ฐ ๋ฐ์ํ ์ ์์
๊ทธ ์ธ์๋ Copying Algorithm, Concurrent Mark-Sweep, Generational Algorithm ์ด๋ฐ ๊ฒ๋ค์ด ์๋๋ฐ, ์ด ์ ๋๋ก๋ง ์์ฑํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ด์ , ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ GC์ ์ข ๋ฅ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
GC์ ์ข ๋ฅ
Serial GC
- ๊ฐ์ฅ ์ค๋๋ GC
- ํ๋์ CPU๋ก Young Generation๊ณผ Old Generation์ ์ฐ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์
- Mark-and-Compact ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ (GC๊ฐ ์ํ๋ ๋ STW๊ฐ ๋ฐ์)
Parallel GC
- ์๋ฐ 7~8 ๋ฒ์ ์์ Default๋ก ์ค์ ๋์ด ์๋ GC
- ๋ค๋ฅธ CPU๊ฐ GC์ ์งํ์๊ฐ ๋์ ๋๊ธฐ ์ํ๋ก ๋จ์ ์๋ ๊ฒ์ ์ต์ํํ๋ ๊ฒ์ด ๋ชฉํ
- GC์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์ฌ STW ์๊ฐ์ด ๋น๊ต์ ์งง์
Parallel Compacting GC
Parallel GC์์ Old Generation์ ์ฒ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝํจ
Concurrent Mark-Sweep(CMS) GC
- ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฐ๋ ๋์ GC์ฐ๋ ๋๊ฐ ๋์์ ์คํ๋์ด STW๋ฅผ ์ต์ํ
- ๊ทธ์ ์๋ GC์ฐ๋ ๋๊ฐ ์คํ๋๋ฉด, ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฐ๋ ๋๊ฐ ๋ฉ์ถ์์
- Parallel GC์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ Compaction ์์ ์ ๋ฌด๋ก ๊ตฌ๋ถ์ด ๋๋ ๊ฒ
์ฌ๊ธฐ์ ๋ถํฐ๋ ์ ํต์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ํํ๋ผ๊ธฐ ๋ณด๋ค๋ ์ข๋ ํํธํ ์์ผ์ ์ผ์ ํฌ๊ธฐ์ Region์ ์๊ฒ ์ชผ๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ ํ์์ต๋๋ค.
Garbage First(G1) GC
- ํฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉํ๊ธฐ ์ ํฉํ GC
- ๋๊ท๋ชจ Heap ์ฌ์ด์ฆ์์ ์งง์ GC ์๊ฐ์ ๋ณด์ฅํ๋๋ฐ(STW๋ฅผ ์ต์ํ) ๋ชฉ์ ์ ๋
- ์ ์ฒด Heap ์์ญ์ Region์ด๋ผ๋ ์์ญ์ผ๋ก ๋ถํ ํ์ฌ ์ํฉ์ ๋ฐ๋ผ ์ญํ ์ด ๋์ ์ผ๋ก ๋ถ์ฌ ๋จ
Z GC
- ZPage๋ผ๋ ์์ญ์ ์ฌ์ฉ
- G1 GC์ Region์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ์ธ๋ฐ ๋นํด Zpage๋ 2mb ๋ฐฐ์๋ก ๋์ ์ผ๋ก ์ด์
- ์ ์ง ์๊ฐ์ด ์ต๋ 10ms๋ฅผ ์ด๊ณผํ์ง์๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ์ด์
- Heap์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๋๋ผ๋ ์ ์ง ์๊ฐ์ด ์ฆ๊ฐํ์ง ์๋ ๊ฒ์ด ํน์ง
'๊ฐ๋ฐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ