B14 : ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (Garbage Collection)

2025. 8. 19. 15:41ใ†Front-end/JavaScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

2. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

3. 00


1. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘ ํ•„์š” ์—†์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋„๋‹ฌ ๊ฐ€๋Šฅ์„ฑ(reachability)๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ๋“  ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.

e.g.

  • ํ˜„์žฌ ํ•จ์ˆ˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜
  • ์ค‘์ฒฉ ํ•จ์ˆ˜์˜ ์ฒด์ธ์— ์žˆ๋Š” ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜
  • ์ „์—ญ ๋ณ€์ˆ˜

์ด๋Ÿฐ ๊ฐ’๋“ค์€ ๋ฃจํŠธ(root)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋ฃจํŠธ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ฐ’์ด๋‚˜ ์ฒด์ด๋‹์œผ๋กœ ๋ฃจํŠธ์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด ๋œ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๋‚ด์—์„œ ๋Š์ž„ ์—†์ด ๋™์ž‘ํ•˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ณ , ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

์˜ˆ์‹œ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ

let user = {
  name: "John"
};

global(์ „์—ญ)์˜ ์ „์—ญ ๋ณ€์ˆ˜ user๋Š” ๊ฐ์ฒด {name: "John"}๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ user์˜ ๊ฐ’์„ null๋กœ ๋ฎ์–ด์“ฐ๋ฉด ์ฐธ์กฐ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

์ด์ œ {name: "John"}์€ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์œผ๋ฏ€๋กœ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ์ด ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค. 

 

  • let admin = user; ๋กœ user์˜ ์ฐธ์กฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋”๋ผ๋„ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜(admin)์ด ์—ฌ์ „ํžˆ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋ฉด,
    ์ด ๊ฐ์ฒด๋Š” ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค.

 


2. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ๋ณดํ†ต ์•„๋ž˜์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑธ์ณ ์ˆ˜ํ–‰๋œ๋‹ค. (mark-and-sweep)

  • mark : ์ฐธ์กฐ์ค‘์ธ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ์ค‘์ด๋ผ๊ณ  markํ•˜๋Š” ์ž‘์—…
  • sweep : mark๊ฐ€ ๋๋‚œ ํ›„, mark๋˜์ง€ ์•Š์€ ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„/ํšŒ์ˆ˜ → ํšŒ์ˆ˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ํ’€์— ์ถ”๊ฐ€
  1. ๋ฃจํŠธ(root) ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ์ด๋ฅผ ๊ธฐ์–ต(mark)ํ•œ๋‹ค.
  2. ๋ฃจํŠธ๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ์ด๋“ค์„ markํ•œ๋‹ค.
  3. mark๋œ ๊ฐ์ฒด์— ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•˜์—ฌ, ๊ทธ ๊ฐ์ฒด๋“ค์ด ์ฐธ์กฐํ•˜๋Š” ๊ฐ์ฒด๋“ค๋„ markํ•œ๋‹ค.
  4. ๋ฃจํŠธ์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ๋ฐฉ๋ฌธํ•  ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  5. mark๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค.

 

์ด ๋‹จ๊ณ„๋“ค์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ๋ฒ•๋“ค์ด ์žˆ๋‹ค.

  • generational collection(์„ธ๋Œ€๋ณ„ ์ˆ˜์ง‘)
    ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์™€ ์˜ค๋ž˜๋œ ๊ฐ์ฒด๋กœ ๋‚˜๋ˆ„์–ด, ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋“ค์„ ๊ณต๊ฒฉ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
    ์—ญํ• ์„ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ธˆ๋ฐฉ ์“ธ๋ชจ๊ฐ€ ์—†์–ด์ง€๋Š” ๊ฐ์ฒด๋“ค์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • incremental collection(์ ์ง„์  ์ˆ˜์ง‘)
    ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„๋ฆฌํ•œ ํ›„, ๊ฐ ๋ถ€๋ถ„์„ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    ์ž‘์—…์„ ๋ถ„๋ฆฌํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ์— ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‚˜, ์ง€์—ฐ ์‹œ๊ฐ„์„ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • idle-time collection(์œ ํœด ์‹œ๊ฐ„ ์ˆ˜์ง‘)
    CPU๊ฐ€ ์œ ํœด ์ƒํƒœ์ผ ๋•Œ์—๋งŒ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‹คํ–‰ํ•˜์—ฌ, ์‹คํ–‰์— ์ฃผ๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.

 

 

 

 

 

์ฐธ๊ณ 

๋”๋ณด๊ธฐ
๋ฐ˜์‘ํ˜•