javascript
Garbage Collection.
Mark-and-Sweep, Generational GC, V8의 GC 전략과 프론트엔드 관점
JavaScript 엔진은 더 이상 도달할 수 없는(unreachable) 객체를 자동으로 찾아 메모리를 회수합니다.
🧹 Mark-and-Sweep (기본)
- Root (global, Call Stack, 클로저 등)에서 출발
- 참조 그래프를 따라 도달 가능(reachable) 객체 표시
- 표시되지 않은 객체 회수
- Reference Counting은 순환 참조를 못 치워서 JS에서는 주 방식이 아님.
🧹 Generational GC (V8 등)
| 세대 | 특징 |
|---|---|
| Young Generation | 새 객체. Scavenge(복사) GC. 자주, 빠르게 |
| Old Generation | 오래 산 객체. Mark-Sweep-Compact. 덜 자주 |
- Minor GC: Young만
- Major GC: Old 포함, STW(Stop-The-World) 구간 발생 가능
💻 프론트엔드 관점
- 짧게 쓰고 버리는 객체는 Young에서 빠르게 정리됨.
- 전역, Map, 이벤트 리스너, 클로저가 오래 붙잡는 참조가 Old로 밀려 Major GC 부담.
- DevTools Memory 탭으로 Heap snapshot, allocation timeline 확인.
🔗 참고 자료
- Memory management (MDN) — Mark-and-Sweep, 도달 가능성, WeakMap/WeakRef를 설명한다.
- WeakRef (MDN) — 약한 참조로 GC와 상호작용하는 API를 다룬다.
- WeakMap (MDN) — 키를 약하게 붙잡는 컬렉션의 GC 특성을 정리한다.
- Fix memory problems (Chrome DevTools) — Heap snapshot 등으로 메모리, GC 이슈를 확인하는 방법을 안내한다.
