boraborayoon.log
๋ก๊ทธ์ธ
boraborayoon.log
๋ก๊ทธ์ธ
๐ Garbage Collection
Purple
ยท
2021๋ 11์ 26์ผ
ํ๋ก์ฐ
0
garbage collection
0
TIL
๋ชฉ๋ก ๋ณด๊ธฐ
63/73
1. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋?
๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํ๋ก๊ทธ๋จ์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ ๋ฆฌํ๋ ๊ฒ์ด๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฐ์ง ์ธ์ด(ํน์ ์์ง)๋ ์๋ฐ, C#, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฑ์ด ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋๋ฌ๊ฐ๋ฅ์ฑ(reachability)๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํํ๋ค. โ๋๋ฌ ๊ฐ๋ฅํ(reachable)โ ๊ฐ์ ์ฝ๊ฒ ๋งํด ์ด๋ป๊ฒ๋ ์ ๊ทผํ๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ ์๋ฏธํ๋ค. ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ๋์ง ์๋๋ค.
์๋์ ๊ฐ๋ค์ ๋๊ฐ ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ๋ค์ด๋ฉฐ, ๋ฃจํธ(root)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ํ์ฌ ํจ์์ ์ง์ญ ๋ณ์์ ๋งค๊ฐ๋ณ์
์ค์ฒฉ ํจ์์ ์ฒด์ธ์ ์๋ ํจ์์์ ์ฌ์ฉ๋๋ ๋ณ์์ ๋งค๊ฐ๋ณ์
์ ์ญ ๋ณ์
๋ฃจํธ๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ด๋ ์ฒด์ด๋์ผ๋ก ๋ฃจํธ์์ ์ฐธ์กฐํ ์ ์๋ ๊ฐ์ ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ด ๋๋ค.
์ ์ญ๋ณ์์ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋์ด ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ด ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค๋ฉด, ํ๋กํผํฐ๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ด ๋๋ค. ์ด ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๋ค๋ ๋๋ฌ ๊ฐ๋ฅํ๋ค๊ณ ์ฌ๊ฒจ์ง๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง ๋ด์์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋์์์ด ๋์ํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ , ๋๋ฌํ ์ ์๋ ๊ฐ์ฒด๋ ์ญ์ ํ๋ค.
๊ฐ๋ฐ์ง ์ปฌ๋ ์ ์ ์์ง์ด ์๋์ผ๋ก ์ํํ๋ฏ๋ก, ๊ฐ๋ฐ์๋ ์ด๋ฅผ ์ต์ง๋ก ์คํํ๊ฑฐ๋ ๋ง์ ์ ์๋ค.
๊ฐ์ฒด๋ ๋๋ฌ ๊ฐ๋ฅํ ์ํ์ผ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋จ๋๋ค.
์ฐธ์กฐ๋๋ค๊ณ ํด์ ๋๋ฌ ๊ฐ๋ฅํ๊ฒ์ ์๋๋ค. ์๋ก ์ฐ๊ฒฐ๋ ๊ฐ์ฒด๋ค๋ ๋๋ฌ ๋ถ๊ฐ๋ฅ ํ ์ ์๋ค. (์, ๊ฐ์ฒด๋ค์ด ์ฐ๊ฒฐ๋์ด ์ฌ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋๋ฐ, ์ด์ฌ์ ๋๋ฌํ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ, ์ฌ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฒด ์ ๋ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ญ์ ๋๋ค.)
2. ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฐฉ๋ฒ
2-1. ํธ๋ ์ด์ฑ
ํ ๊ฐ์ฒด์ flag๋ฅผ ๋๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฌ์ดํด๋ง๋ค flag๋ฅผ ํ์ ํ ์ญ์ ํ๋ mark and sweep ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ์ฒด์ in-use flag๋ฅผ ๋๊ณ , ์ฌ์ดํด๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์๊ฐ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ถ์ ํด์ ์ฌ์ฉ ์ค์ธ์ง ์๋์ง๋ฅผ ํ์(mark)ํ๋ค. ๊ทธ ํ ํ์๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ญ์ (sweep)ํ๋ ๋จ๊ณ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค.
2-2. ๋ ํผ๋ฐ์ค ์นด์ดํ
ํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์์ ์๋ฅผ ์ถ์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๋ ์ฒ์์๋ ํน์ ๋ฉ๋ชจ๋ฆฌ์ ๋ํด ๋ ํผ๋ฐ์ค๊ฐ ํ๋ ๋ฟ์ด์ง๋ง, ๋ณ์์ ๋ ํผ๋ฐ์ค๊ฐ ๋ณต์ฌ๋ ๋๋ง๋ค ๋ ํผ๋ฐ์ค ์นด์ดํธ๊ฐ ๋์ด๋๋ค. ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๋ณ์์ ๊ฐ์ด ๋ฐ๋๊ฑฐ๋, ๋ณ์ ์ค์ฝํ๋ฅผ ๋ฒ์ด๋๋ฉด ๋ ํผ๋ฐ์ค ์นด์ดํธ๋ ์ค์ด๋ ๋ค. ๋ ํผ๋ฐ์ค ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด, ๊ทธ ๊ฐ์ฒด์ ๊ด๋ จ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋น์ธ ์ ์๋ค. ๋ ํผ๋ฐ์ค ์นด์ดํธ๊ฐ 0์ด ๋๋ค๋ ๋ง์ ์๋ฌด๋ ๊ทธ ๊ฐ์ฒด์ ๋ํ ๋ ํผ๋ฐ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ ๋ง์ด๊ธฐ ๋๋ฌธ์ด๋ค.
3. ๊ฐ๋น์ง ์ปค๋ ์ ์ต์ ํ ๋ฐฉ๋ฒ
3-1. ์ธ๋๋ณ ์์ง(generational collection)
๊ฐ์ฒด๋ฅผ โ์๋ก์ด ๊ฐ์ฒดโ์ โ์ค๋๋ ๊ฐ์ฒดโ๋ก ๋๋๋ค. ๊ฐ์ฒด ์๋น์๋ ์์ฑ ์ดํ ์ ์ญํ ์ ๋น ๋ฅด๊ฒ ์ํํด ๊ธ๋ฐฉ ์ธ๋ชจ๊ฐ ์์ด์ง๋๋ฐ, ์ด๋ฐ ๊ฐ์ฒด๋ฅผ โ์๋ก์ด ๊ฐ์ฒดโ๋ก ๊ตฌ๋ถํ๋ค. ๊ฐ๋ฐ์ง ์ปฌ๋ ํฐ๋ ์ด๋ฐ ๊ฐ์ฒด๋ฅผ ๊ณต๊ฒฉ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋ค. ์ผ์ ์๊ฐ ์ด์ ๋์ ์ด์๋จ์ ๊ฐ์ฒด๋ โ์ค๋๋ ๊ฐ์ฒดโ๋ก ๋ถ๋ฅํ๊ณ , ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ ๊ฐ์ํ๋ค.
3-2. ์ ์ง์ ์์ง(incremental collection)
๋ฐฉ๋ฌธํด์ผํ ๊ฐ์ฒด๊ฐ ๋ง๋ค๋ฉด ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ํ๋ฒ์ ๋ฐฉ๋ฌธํ๊ณ markํ๋๋ฐ ์๋นํ ์๊ฐ์ด ์๋ชจ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ง์ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ๋์ด ์คํ ์๋๋ ๋์ ๋๊ฒ ๋๋ ค์ง๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ด๋ฐ ํ์์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋ถ๋ฆฌํ ๋ค์, ๊ฐ ๋ถ๋ถ์ ๋ณ๋๋ก ์ํํ๋ค. ์์ ์ ๋ถ๋ฆฌํ๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ ์ถ์ ํ๋๋ฐ ์ถ๊ฐ ์์ ์ด ํ์ํ๊ธด ํ์ง๋ง, ๊ธด ์ง์ฐ์ ์งฆ์ ์ง์ฐ ์ฌ๋ฌ๊ฐ๋ก ๋ถ์ฐ ์ํฌ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
3-3. ์ ํด ์๊ฐ ์์ง(idle-time collection)
๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์คํ์ ์ฃผ๋ ์ํฅ์ ์ต์ํํ๊ธฐ ์ํด CPU๊ฐ ์ ํด ์ํ์ผ ๋์๋ง ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์คํํ๋ค.
Purple
๋ค์ ๋ณด๋ฉด, ๋ ๋ง์ ๊ฒ๋ค์ด ๋ณด์ธ๋ค.
ํ๋ก์ฐ
์ด์ ํฌ์คํธ
๐ฅ ์ด์์ฒด์ (๊ธฐ์ด)์ ๋ํด์
๋ค์ ํฌ์คํธ
Git Branch์ ๋ํ์ฌ
0๊ฐ์ ๋๊ธ
๋๊ธ ์์ฑ
๊ด๋ จ ์ฑ์ฉ ์ ๋ณด