๐Ÿ—‘ Garbage Collection

Purpleยท2021๋…„ 11์›” 26์ผ
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๊ฐ€ ์œ ํœด ์ƒํƒœ์ผ ๋•Œ์—๋งŒ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‹คํ–‰ํ•œ๋‹ค.
profile
๋‹ค์‹œ ๋ณด๋ฉด, ๋” ๋งŽ์€ ๊ฒƒ๋“ค์ด ๋ณด์ธ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€