-
Notifications
You must be signed in to change notification settings - Fork 115
20210914 Garbage Collection
Garbage Collection์ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ ์ค ํ๋๋ก, ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค์์ ํ์์๊ฒ ๋ ์์ญ์ ํด์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
ํ์ง๋ง ์ด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋จ์ ์ผ๋ก
- ์ฒซ์งธ, ์ด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ์ง, ์ธ์ ํด์ ํ ์ง ๊ฒฐ์ ํ๋ ์ค๋ฒํค๋๊ฐ ์ผ์ด๋ฉ๋๋ค.
- ๋์งธ, ์ปฌ๋ ์ ์ด ์ผ์ด๋๋ ํ์ด๋ฐ์ด๋ ์ ์ ์๊ฐ์ ์์ธกํ๊ธฐ ์ด๋ ค์ ์ผ์์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์ ์ง๋๊ณค ํฉ๋๋ค.
- ์ ์งธ, ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ ์์ ์ ์ ์ ์์ต๋๋ค.
์ด ๋จ์ ์ค ํ๊ฐ์ง๋ฅผ ์ ํด, ์์ ๋ง์ ์์ด๋์ด๋ก(์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ์ง, ์๊ณ ๋ฆฌ์ฆ์ ์ง๋ ์ง) ๋จ์ ์ ํด๊ฒฐํ๋ ๋ฐฉ์์ ์๋ฆฝํ์ฌ ์ค๋ช ํด์ฃผ์ธ์.
์ฒซ๋ฒ์งธ ๋จ์ ์ ๋ํ์ฌ
์ฐธ๊ณ : [Java] Garbage Collection(๊ฐ๋น์ง ์ปฌ๋ ์ )์ ์ฑ๋ฅ์ ๋์ด๋ ์ฝ๋ฉ ๋ฐฉ๋ฒ
์ด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ์ง ๊ฒฐ์ ํ๋ ๋ถ๋ถ์ ์์ด์ ๊ฐ๋ฐ์์ ์ ์ฅ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ๋ถ๋ถ์ ์๊ฐํด๋ณด์์ต๋๋ค. ์ธ์ด๋ Java์ ๋๋ค.
- Java Collection API๋ฅผ ์ฌ์ฉํ ๋, ๊ทธ ํฌ๊ธฐ๋ฅผ ์์ธกํ ์ ์๋ค๋ฉด ์์ฑ ์์ ์ง์ ์ค์ ํด์ฃผ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด ArrayList์ ๊ฒฝ์ฐ, ํฌ๊ธฐ๋ฅผ ์ค์ ํด์ฃผ์ง ์๋๋ค๋ฉด ์ ํด์ง ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์๋ก ์์ฑํ๊ณ ๋ถ์ฌ์ฃผ๋ ์์ผ๋ก ๊ตฌํ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์ฉํ์ง ์๋ ํฌ๊ธฐ์ ๋ํด์๋ ๋ฐฐ์ด์ด ์์ฑ๋์ด ๊ฐ๋น์ง๊ฐ ๋ฐ์ํฉ๋๋ค.
- Stream์ ์ฌ์ฉํ์ฌ ์ผ์ ํ chunk ๋งํผ์ฉ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋๋ก ํฉ๋๋ค. ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ํฌ๋ค๋ฉด OutOfMemoryErrors๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ Stream์ ์ฌ์ฉํ์ฌ Buffer๋ฅผ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ OutOfMemoryErrors๋ฅผ ๋ฐฉ์งํ๊ณ ๊ฐ๋น์ง์ ์์ฑ์ ์ต์ํํ ์ ์์ต๋๋ค.
- ๋ถ๋ณ์ฑ์ ํ์ฉํ์ฌ ์ฝ๋ฉํฉ๋๋ค. Java์์ ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋๊ฒจ์ฃผ๊ณ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉ์ ํ๋ค๋ณด๋ฉด, ๊ทธ ๊ท๋ชจ๊ฐ ์ปค์ก์ ๋ ์ฌ๋ฌ ํจ์๋ค์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ค์บํด์ผ ํ๋ ๊ฐ์ฒด์ ์๊ฐ ๋์ด๋ฉ๋๋ค. ๋ถ๋ณ์ฑ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉ์ ํ๋ฉด ์ค์บํด์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ๊ณผ ๋น๋์๊ฐ ์ค์ด๋ค์ด ์ฑ๋ฅ์ ๋์ผ ์ ์์ต๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ
- Heap ๊ณต๊ฐ์ด Eden, Survivor1, Survivor2, Old ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ์ ๊ด๋ฆฌ๋ฉ๋๋ค. ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด Eden์ ์ ์ฅ๋๊ณ , Eden์ด ๊ฝ์ฐจ๋ฉด Mark and Sweep์ด ์งํ๋ฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ Survivor1์ผ๋ก ์ด๋๋ฉ๋๋ค. Survivor1์ด ๊ฝ์ฐจ๋ฉด ์ญ์ Mark and Sweep ์งํ ํ Survivor2๋ก ์ด๋๋๊ณ , Survivor2๊ฐ ๊ฝ์ฐจ๋ฉด ์ญ์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น ํ ๋ค์ Survivor1์ผ๋ก ์ด๋ํฉ๋๋ค. Survivor1๊ณผ Survivor2๋ก ์ด๋์ ํน์ ํ์ ๋งํผ ๋ฐ๋ณตํ๊ณ ๋๋ฉด Old๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค. Old๊ฐ ๊ฝ์ฐจ๊ฒ ๋๋ฉด Mark and Sweep ๊ณผ์ ์ ์งํํ๊ณ ๋น์์ง ๊ณต๊ฐ๋ค์ ์ฑ์ฐ๊ธฐ ์ํด Compaction์ด ์งํ๋ฉ๋๋ค. ์ด Compaction ๊ณผ์ ์์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ค๋ ๋๋ค์ด ์ผ์ ์ค์ง๋ฉ๋๋ค.
Mark and Sweep: ๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด(์ฐ๋ ๊ธฐ ๊ฐ)๋ฅผ ์ฐพ์๋ด๊ณ ๋น์๋ด๋ ๊ณผ์
์ค๋ ๋๊ฐ ์ผ์ ์ค์ง๋๋ ํ์์ ์ต์ํ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
- ๊ฐ์ฅ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ๋ฐ์ํ๋ ํ์๋ฅผ ์ค์ด๋ ๊ฒ์ ๋๋ค. ๊ฐ๋ฐํ ๋ ๋์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด๋ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ฃผ์ด ๊ฐ๋น์ง ์ฝ๋ ํฐ๊ฐ ํ๊ฒ๋๋ ์ผ์ ์์ ์ค์ฌ ์ค๋๋ค. ๋ค๋ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ง์ํ๋ Java์ ๊ฒฝ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ์ง์ ํด์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด ์์ง ๊ตฌํ๋์ด ์์ง ์์ต๋๋ค.
- Old ๊ตฌ์ญ์ ๊ณต๊ฐ์ด ๊ฝ ์ฐผ์ ๋ Mark and Sweep์ ์งํํ ํ Compaction ๊ณผ์ ์ ์คํํ์ง ์์ต๋๋ค. ์ค๋ ๋๋ฅผ ์ผ์ ์ค์ง ์ํค๋ ๊ทผ๋ณธ์ ์ธ ์์ธ์ ํด๊ฒฐํ๋ ๊ฒ์ ๋๋ค. ๋ค๋ง ์ด๋ด ๊ฒฝ์ฐ Old ๊ตฌ์ญ์ ๋จํธํ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋จํธํ๊ฐ ๋ฐ์ํ ์์น์ ๋น์ด์๋ ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ค๊ฐ Old ๊ตฌ์ญ์ ์๋ก์ด ๊ฐ์ฒด ํ ๋น ์ ์ฐธ์กฐํ์ฌ ๋ฃ์ด์ค๋๋ค. ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฐ์ํ๋ค๋ ๋จ์ ์ด ์์ง๋ง ์ค๋ ๋๊ฐ ์ค์ง๋๋ ์ํฉ์ ๋ฐฉ์งํ ์ ์์ ๊ฒ์ด๋ผ๋ ์๊ฒฌ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ ํ์ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณํ๋ ๊ฒ์ ์ฐธ์กฐ ์ฌ๋ถ
์ ์ํด ์งํ๋ฉ๋๋ค.
์ด๋ฌํ ๊ฐ๋น์ง(๋ ์ด์ ์ฐ์ด์ง ์๋ ์ค๋ธ์ ํธ)
๋ฅผ ํ๋จํ๋ ๋ฐ์๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค.
์ด๋ค ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ ์ฐธ์กฐํ์ง ์์ ์ค๋ธ์ ํธ๊ฐ ์ฐจ์งํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋น์ง๋ก ๊ท์ ํฉ๋๋ค.
ํ์ง๋ง, ๋ ๊ฐ์ฒด๊ฐ ์๋ก ์ฐธ์กฐํ๋ฉฐ ์ํํ๋ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃฐ ๋ ๊ฐ๋น์ง๋ก ์ธ์๋์ง ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
๋ ์ด์ ๋ฟ์ ์ ์๋ ์ค๋ธ์ ํธ ๋ฅผ ๊ฐ๋น์ง๋ก ๊ท์ ํฉ๋๋ค.
์ด๋ฅผ ์ํด root
๋ผ๋ ์ค๋ธ์ ํธ์ ์งํฉ์ ์ฌ์ฉํฉ๋๋ค.
root๊ฐ ์ฐธ์กฐํ๋ ์ค๋ธ์ ํธ, root๊ฐ ์ฐธ์กฐํ๋ ์ค๋ธ์ ํธ๊ฐ ์ฐธ์กฐํ๋ ์ค๋ธ์ ํธ...
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๋ฟ์ ์ ์๋ ์ค๋ธ์ ํธ์ ๊ทธ๋ ์ง ์์ ์ค๋ธ์ ํธ๋ก ์ด๋ถํํ๊ณ ๋ฟ์ ์ ์๋ ์ค๋ธ์ ํธ์ ๋ํด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํํฉ๋๋ค.
์์ Reference-Counting ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ค๋ฅด๊ฒ ์ํ ์ฐธ์กฐ์ ๋ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
2012๋ ๊ธฐ์ค ๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ ๊ฐ๋น์ง ์ฝ๋ ์ ์์ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ณ ํฉ๋๋ค.
ํ์ง๋ง ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ๋น์ง ์ฝ๋ ์ ์ ํธ๋ค๋ง ํ์ง๋ ๋ชปํฉ๋๋ค.
๊ฒฐ๊ตญ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ธ์ ํด์ ๋๋๊ฐ? ์ ๋ํ ์ง๋ฌธ์ ์๋ฒฝํ ๋ต์ ์ป์ ์๋ ์์์ต๋๋ค.
๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ํด์ ์์ ์ ์๋์ผ๋ก ๊ฒฐ์ ํ ์ ์์ผ๋, ๊ทธ๋ฆผ๋์ด ์ธ๊ธํ ๋ฐฉ์์ฒ๋ผ `๋ฉ๋ชจ๋ฆฌ ๋์`๋ฅผ ๋ฐฉ์งํ๋ฉฐ ๊ฐ๋น์ง๋ฅผ ๋ฏธ๋ฆฌ ์๋ฐฉํ๋ ์ฝ๋ฉ ์ต๊ด์ ๊ฐ๋๊ฒ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฒซ๋ฒ์งธ์ ๋๋ฒ์งธ ๋ฌธ์ ๋ ์ต์ํ๋ ๊ฐ๋ฅํ๋ ์์ ํ ํด๊ฒฐ์ ๋ถ๊ฐ๋ฅ ํ ๊ฒ์ผ๋ก ๋ณด์ด๊ณ ์ธ๋ฒ์งธ ๋ฌธ์ ๋ ์ค๋ฒํค๋๋ ๋ฐ์ํ๋๋ผ๋ ์์ ํ ํด๊ฒฐ์ด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ณด์ ์ ํํ์์ต๋๋ค.
- (์ ํฉํ) ์ผ์ ํ ์ฃผ๊ธฐ๋ง๋ค ํด์ ๋ฅผ ์งํํ๊ณ ํด์ ๋๋ ์์ ์ ๊ธฐ๋กํ๋ค.
- ๊ฒ์์(์ฌ์ฉ์ค), ํ์(์์ง ๊ฒ์ฌ ๋ฏธ์งํ), ํฐ์(๋ฏธ์ฌ์ฉ) ์ ์ฌ์ฉํ๋ ์ผ์ํ๊ธฐ๊ธฐ๋ฒ์ ํ์ฉํ๋ค.
- ํฐ์ ๋์ ๋ช๋ฒ์งธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์ ํด๋น ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์๋์ง ๊ธฐ๋กํ๋ค.
- ์ด๋ฌํ ์ ๋ณด(์ฃผ๊ธฐ, ๋ช๋ฒ์งธ ๊ฐ๋น์ง์ปฌ๋ ์ ์ธ์ง)๋ฅผ ํ ๋๋ก ์ธ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์๋ ์ง ํ์ธ ๊ฐ๋ฅํ๋ค.
๋ฌธ์ ์ : ํฐ์์ด๋ ์ ๋ณด ๋์ ์ผ๋งํผ ๋์ด๋ ์ง ๋ชจ๋ฅด๋ ์ ์๋ฅผ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ผํ๋ค๋ ์ ๊ณผ ์ ์ ํ ์ฃผ๊ธฐ๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ ๊ฒ์ธ์ง์ ๋ํ ๋ฌธ์ ์ ์ด ์กด์ฌํฉ๋๋ค.
๊ฒฐ๋ก : ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฃผ๊ธฐ๋ฅผ ์ด๋์ ๋ ํ์ ํ๊ณ ์ ๋ณด๊ธฐ๋ก์ ๋์ด๋๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ํด์ ๋๋ ์์ ์ ์ถ์ ํ๋๊ฒ ์ค์ํ ๋ฌธ์ ๋ผ๋ฉด ์ ์ฉํด๋ณผ๋งํ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋ํด ์์๋ณผ ์ ์๋ ์๊ฐ์ด์์ต๋๋ค. ์ด์ ๋ํด์ ์๊ฐํด๋ณด๋ ๊ฒ๋ง์ผ๋ก ์๋ฏธ์๋ ์๊ฐ์ด์์ง๋ง, ๊ฐ๋ฐ์๋ก์ ํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฑ๋ฅ์ ๊ณ ๋ คํ ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ํด ์๊ณ ์์ผ๋ฉฐ ๊ทธ๋ฅผ ๊ณ ๋ คํ ์ฝ๋ฉ ๋ฐฉ์์ ์ตํ์๋ ๊ฒฐ๋ก ์ด ๋์์ต๋๋ค.