자바스크립트 GC는 자동 메모리 관리 방식이나, 개발자의 실수로 메모리 누수 발생 가능
참조 카운트 방식의 한계를 극복한 마크 앤 스윕 알고리즘 소개
클로저, 이벤트 리스너, DOM 참조 등 실무에서 흔한 메모리 누수 원인 분석
자바스크립트 GC는 마크 앤 스윕 알고리즘을 기반으로 불필요한 메모리를 해제한다. 구체적으로 루트 객체로부터 도달 가능한 객체를 마킹하고, 마킹되지 않은 객체를 메모리 해제 대상으로 판단한다. 따라서 순환 참조 문제 해결 및 메모리 효율성을 높인다.
클로저, 이벤트 리스너, DOM 참조는 GC가 객체를 해제하지 못하게 하는 주요 원인이다. 클로저는 불필요한 변수를 계속 참조하고, 는 DOM 요소 제거 후에도 메모리를 점유한다. 따라서 를 유발하여 를 초래한다.
Chrome DevTools의 Memory 탭을 활용하여 메모리 누수를 탐지하고 해결한다. Heap snapshot으로 객체 점유 현황을 파악하고, Allocation instrumentation으로 메모리 할당/해제를 추적한다. 따라서 useEffect cleanup 함수를 활용하여 이벤트 리스너 해제를 자동화한다.