[javascript] 자바스크립트에서 사용되는 메모리 관리 기법의 동작 원리
자바스크립트는 가비지 컬렉션이라는 메모리 관리 기법을 사용하여 메모리를 관리합니다. 가비지 컬렉션이란, 더 이상 사용되지 않는 메모리를 자동으로 탐지하여 해제하는 기능을 말합니다. 이는 개발자가 명시적으로 메모리를 해제하지 않아도 됨을 의미합니다.
가비지 컬렉션의 동작 원리
- Reachability(도달 가능성): 가비지 컬렉션의 핵심 개념은 도달 가능성입니다. 어떤 값이 도달 가능한지 정의하여 도달 가능하지 않은 값은 가비지로 판단하고 메모리를 해제합니다.
- 전역 변수는 항상 도달 가능한 상태입니다.
- 함수 내부에서 선언한 지역 변수는 해당 함수가 호출 또는 참조되고 있을 때 도달 가능한 상태입니다.
- 함수 내부에서 선언된 변수가 외부에서 참조되는 경우 해당 변수는 도달 가능한 상태입니다.
- Mark and Sweep(표시 및 청소): 가비지 컬렉션은 주기적으로 실행되며, 실행 시점에 실제로 메모리를 해제할 가비지를 결정합니다.
- 모든 도달 가능한 객체를 표시(Mark)합니다.
- 표시되지 않은 객체는 가비지로 간주되어 메모리에서 해제(Sweep)됩니다.
- 정리 단계(Compaction): 가비지 컬렉션 후에는 메모리 공간이 조각화될 수 있습니다. 이때 메모리 공간을 정리하는 단계인 컴팩션을 수행합니다. 컴팩션은 메모리 공간의 조각화를 최소화하여 메모리 사용을 최적화합니다.
가비지 컬렉션의 장단점
장점
- 개발자가 명시적으로 메모리를 해제할 필요가 없어 편리합니다.
- 불필요한 메모리 누수를 방지하여 안정성을 높입니다.
단점
- 가비지 컬렉션에 의한 메모리 관리로 인해 약간의 성능 저하가 발생할 수 있습니다.
- 임의의 시간에 가비지 컬렉션이 발생하기 때문에 정확한 시점을 예측하기 어려울 수 있습니다.