--- id: [[P-Reinforce|P-Reinforce]]-AUTO-31335C category: Unified confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - GC Root" --- # [[GC Root|GC Root]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > GC Root(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋ฃจํŠธ)๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ์‚ด์•„์žˆ๋Š”(live) ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ์กฐ ์ถ”์ ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ธฐ์ค€์  ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค [1-3]. ํž™(heap) ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ด์•„์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ •์˜๋˜๋ฉฐ, ํž™ ๋‚ด๋ถ€์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ด ๋ฃจํŠธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ํฌ์ธํ„ฐ ์ฒด์ธ์„ ํ†ตํ•ด ๋„๋‹ฌ ๊ฐ€๋Šฅ(reachable)ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [1, 2, 4]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) - **GC ๋ฃจํŠธ์˜ ์ •์˜์™€ ์ฃผ์š” ์ข…๋ฅ˜:** GC ๋ฃจํŠธ๋Š” V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด๋‚˜ ์›น ๋ธŒ๋ผ์šฐ์ €, ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (VM) ์™ธ๋ถ€์—์„œ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1]. ์ฃผ์š” ์ข…๋ฅ˜๋กœ๋Š” ํ˜ธ์ถœ ์Šคํƒ(stack)์— ์กด์žฌํ•˜๋Š” ๋กœ์ปฌ ๋ณ€์ˆ˜, ํ•ญ์ƒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ „์—ญ ๊ฐ์ฒด(Global objects), ํด๋ž˜์Šค ์ •์  ํ•„๋“œ(class static field), JNI ์ฐธ์กฐ, ๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ €์˜ DOM ์š”์†Œ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. ์›น ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๊ด€๋ จํ•˜์—ฌ ์ฐฝ(window), ํ™œ์„ฑ ํด๋กœ์ €(active closures), ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ, ํƒ€์ด๋จธ ๋“ฑ๋„ ๋ฃจํŠธ ์—ญํ• ์„ ํ•˜์—ฌ ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค [5]. - **๋งˆํ‚น ๋ฐ ์ถ”์  ๊ณผ์ •(Marking and Tracing):** [[Mark-Sweep|Mark-Sweep]] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์—์„œ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์€ ๋ฃจํŠธ ์„ธํŠธ(root set)์—์„œ ์ถœ๋ฐœํ•ฉ๋‹ˆ๋‹ค [3]. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๋ฃจํŠธ ์Šค์บ”์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๋ฃจํŠธ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ์ด๋ฅผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ž‘์—… ์Šคํƒ(work stack)์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค [2]. ๊ทธ๋Ÿฐ ๋‹ค์Œ GC๋Š” ๋ฃจํŠธ ๊ฐ์ฒด์—์„œ ์‹œ์ž‘ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ชจ๋“  ํฌ์ธํ„ฐ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ถ”์ ํ•˜์—ฌ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋“ค์„ ๋งˆํ‚น(Mark)ํ•ฉ๋‹ˆ๋‹ค [2, 3]. ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ฒƒ๋“ค์€ ๊ฐ€๋น„์ง€๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค [4, 6]. - **๋งˆ์ด๋„ˆ GC๋ฅผ ์œ„ํ•œ ํŠน์ˆ˜ ๋ฃจํŠธ(V8 [[Scavenge|Scavenge]]r):** V8 ์—”์ง„์˜ ์ Š์€ ์„ธ๋Œ€(young generation)๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋งˆ์ด๋„ˆ GC(Scavenger)์˜ ๊ฒฝ์šฐ, GC๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ๊ตฌ์„ธ๋Œ€(old generation) ํž™์„ ๋ชจ๋‘ ์Šค์บ”ํ•˜๋Š” ๋น„ํšจ์œจ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ๊ธฐ ์žฅ๋ฒฝ(Write Barriers)์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [7]. ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ์„ธ๋Œ€์—์„œ ์ Š์€ ์„ธ๋Œ€๋กœ ํ–ฅํ•˜๋Š” ์ฐธ์กฐ(old-to-new [[Reference|Reference]]s) ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜๋ฉฐ, ์ด๋ฅผ ์Šคํƒ ๋ฐ ์ „์—ญ ๋ณ€์ˆ˜ ๋“ฑ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ Š์€ ์„ธ๋Œ€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์œ„ํ•œ ์ถ”๊ฐ€์ ์ธ ๋ฃจํŠธ ์„ธํŠธ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค [7]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], Mark-Sweep Algorithm, [[memory|memory]] Leak, Reachability - **Projects/Contexts:** [[V8 Engine|V8 Engine]], IBM SDK Java Technology - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด V8 ์—”์ง„([[JavaScript|JavaScript]])๊ณผ IBM Java ๊ตฌํ˜„ ๋ชจ๋‘ GC ๋ฃจํŠธ๋ฅผ ํ†ตํ•œ ์ฐธ์กฐ ์ถ”์ ์ด๋ผ๋Š” ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ์ฐจ์ด์— ๋”ฐ๋ผ V8์€ DOM ์š”์†Œ๋‚˜ ํด๋กœ์ € ๋“ฑ์„ ์ฃผ๋กœ ๋‹ค๋ฃจ๊ณ  [1, 5], Java๋Š” JNI ์ฐธ์กฐ๋‚˜ ํด๋ž˜์Šค ์ •์  ํ•„๋“œ ๋“ฑ์„ ๋‹ค๋ฃฌ๋‹ค๋Š” ์„ธ๋ถ€์ ์ธ ํŠน์„ฑ์˜ ์ฐจ์ด๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค [2]. --- *Last updated: 2026-04-19* ---