메모리 누수

더 이상 필요 없는 객체에 대한 참조가 의도치 않게 계속 유지되어, 가비지 컬렉터가 해당 메모리를 회수하지 못하는 현상입니다.

발생 원인

예시

function attachListener() {
  const el = document.getElementById('button');
  el.addEventListener('click', () => console.log('clicked'));
}
// el을 DOM에서 제거해도 리스너를 해제하지 않으면 참조가 남아 GC 대상에서 제외됨

방지 방법

모니터링 방법

크롬 개발자 도구의 Memory 탭으로 확인할 수 있습니다. Heap snapshot으로 특정 시점의 힙 메모리에 어떤 객체가 존재하는지 파악하고, Allocations on timeline으로 시간에 따른 메모리 할당·해제 추이를 추적할 수 있습니다.

핵심 정리

메모리 누수는 이벤트 리스너 미해제, 클로저 오남용, 전역 변수 남용 등으로 불필요한 참조가 계속 유지될 때 발생하며, 참조를 명시적으로 해제하고 스코프를 최소화해 방지할 수 있습니다.

→ 자바스크립트에서 메모리 누수가 발생하는 상황들을 설명해주세요

CSLOG에서 보기