학습 공간 개념 · 판단 · 실험

Fanta Lab

질문 31 · 실전 면접 답변

가비지 컬렉션과 메모리 누수는 어떻게 설명하나요?

이렇게 답해 보세요 (핵심 답변)

JavaScript 엔진은 루트(전역 객체, 현재 호출 스택 등)에서 시작해 참조를 따라 도달할 수 있는 객체는 살려 두고, 더 이상 도달할 수 없는 객체를 가비지 컬렉터(GC)가 자동으로 회수합니다. 하지만 더 이상 쓰지 않는 데이터라도 전역 변수, 해제하지 않은 타이머·이벤트 리스너, 클로저나 캐시에 참조가 남아 있으면 GC가 수거하지 못해 메모리 누수가 됩니다. 따라서 작업 종료 시 리스너와 타이머를 정리하고, 힙 스냅샷의 보유 경로(Retaining Path)로 누수 원인을 찾습니다.

함께 설명하면 좋은 이유 (꼬리질문 대비)

  1. 두 객체가 서로를 가리키는 순환 참조가 있더라도 루트에서 그 두 객체로 가는 경로가 끊어지면 현대 GC는 정상적으로 회수합니다.
  2. 가비지 컬렉션이 정확히 언제 실행될지는 엔진이 결정하므로 애플리케이션 코드에서 수거 시점을 임의로 강제하거나 의존해서는 안 됩니다.

면접에서 자주 하는 실수

일시적으로 메모리 사용량이 늘어난 것만 보고 바로 메모리 누수라고 단정하기보다, GC 이후에도 기준선이 계속 우상향하는지 확인해야 합니다.

원리와 예제까지 읽기

공식 참고 자료

질문 목록 출처 ↗ · 원본 31번을 바탕으로 질문과 답변을 새로 정리했습니다.

← JavaScript