자바스크립트 메모리 관리

자바스크립트 엔진이 변수와 객체가 사용할 메모리를 할당하고, 더 이상 필요하지 않은 메모리를 자동으로 탐지해 해제하는 과정입니다.

메모리 할당

변수나 객체를 생성하는 시점에 메모리 할당이 발생합니다. 값의 종류에 따라 저장되는 위치가 다릅니다.

메모리 해제 (가비지 컬렉션)

C와 같은 저수준 언어는 malloc(), free()처럼 개발자가 직접 메모리를 할당·해제하지만, 자바스크립트는 가비지 컬렉션(GC) 을 통해 언어 차원에서 자동으로 메모리를 추적하고 더 이상 필요 없는 메모리를 해제합니다.

Reference-counting

객체가 참조되는 횟수를 추적하다가 참조 횟수가 0이 되면 메모리를 해제하는 방식입니다. 구현이 단순하지만, 서로를 참조하는 순환 참조가 발생하면 참조 카운트가 0이 되지 않아 메모리가 해제되지 않는 한계가 있습니다.

Mark-and-sweep

루트 객체에서 시작해 참조를 따라가며 도달 가능한 객체를 표시(mark)하고, 끝까지 표시되지 않은 객체를 메모리에서 청소(sweep)하는 방식으로 Reachability와 동일한 개념입니다. 순환 참조가 발생하더라도 루트에서 도달할 수 없다면 표시되지 않으므로, Reference-counting 방식의 한계를 보완할 수 있습니다.

핵심 정리

자바스크립트는 원시 값을 Stack에, 객체를 Heap에 저장하며, 가비지 컬렉션을 통해 메모리 해제를 자동으로 처리합니다. 초기 가비지 컬렉션 방식인 Reference-counting은 순환 참조를 해결하지 못했고, 이를 보완한 Mark-and-sweep이 현대 자바스크립트 엔진의 기본 GC 알고리즘으로 사용됩니다.

→ 자바스크립트의 메모리 관리에 대해서 아는대로 설명해주세요

CSLOG에서 보기