가비지 컬렉션은 프로그래밍 언어가 더 이상 사용하지 않는 메모리를 자동으로 회수하여 메모리 누수를 방지하고 애플리케이션 성능을 최적화하는 프로세스다.
JavaScript는 가비지 컬렉션을 위해 여러 가지 알고리즘을 사용하지만 가장 일반적인 알고리즘은 mark-and-sweep이다.
mark 단계에서 가비지 컬렉터는 호출 스택의 전역 개체 및 지역 변수와 같은 루트 개체 집합에서 시작하여 이러한 루트에서 연결할 수 있는 모든 개체를 반복적으로 표시한다. 연결 가능한 개체는 프로그램에서 계속 접근하거나 사용할 수 있는 개체다.
도달 가능한 모든 객체가 표시되면 가비지 컬렉터는 sweep 단계로 진행된다. 이 단계에서는 메모리를 순회하여 mark 단계에서 mark되지 않은 모든 개체를 수집한다. 해당 개체는 도달할 수 없는 것으로 간주되어 안전하게 제거할 수 있기 때문이다.
전역 변수는 애플리케이션 수명 동안 메모리에 유지되기 때문에 가능하면 지역 변수를 사용하는 것이 좋다.
이벤트 리스너를 추가하거나 DOM을 조작할 때 더 이상 필요하지 않은 경우 참조를 제거하고 리스너를 정리해야 합니다.
예를 들어 자주 추가하고 삭제해야 하는 컬렉션의 경우 Map과 Set을 사용하면 메모리 관리 측면에서 더 효율적일 수 있다.
클로저는 더 이상 필요하지 않은 변수에 대한 참조를 유지할 수 있다.