도달 가능성 기반 가비지 컬렉션 흐름
루트에서 참조 그래프를 따라갈 수 있는 객체만 살아 있고, 끊긴 객체는 수거 대상이 된다.
| 단계 | 의미 | 살아남는 조건 | 누수 신호 |
|---|---|---|---|
| Root | 전역, 현재 스택, 클로저 등 시작점 | root에서 참조됨 | 전역 배열에 계속 보관 |
| Mark | 참조를 따라 객체 표시 | 연결된 객체는 reachable | DOM과 JS 객체가 서로 붙잡음 |
| Unreachable | 어디에서도 닿지 않음 | 수거 후보 | 타이머/리스너가 참조를 유지 |
| Collect | 메모리 회수 | 더 이상 사용할 수 없음 | 명시적 delete만 믿음 |
| Weak reference | 수거를 막지 않는 참조 | WeakMap, WeakSet | 키가 객체여야 함 |
메모리 누수는 객체 크기보다 루트에서 끊기지 않은 참조가 남아 있는지로 판단한다.