자바스크립트는 눈에 보이지 않는 곳에서 메모리 관리를 수행한다.
우리가 만드는 모든것은 메모리를 차지하게 된다.
그럼 더는 사용하지 않는 것들을 어떻게 처리할까?
자바스크립트는 어떻게든 접근하거나 사용할 수 있는 값인 도달 가능한 값
을 기준으로 메모리를 관리한다
도달 가능한 값은 메모리에서 삭제되지 않는다.
현재 함수의 지역 변수와 매개변수
중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수
전역 변수
기타 등등
단, 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 제외된다.
도달할 수 없는섬 -> 객체들이 연결되어 섬 같은 구조를 만드는데, 이 섬에 도달할 방법이 없는경우 섬을 구성하는객체 전부가 메모리에서 삭제된다.
'mark-and-sweep’이라 불리는 가비지 컬렉션 기본 알고리즘.
'가비지 컬렉션’은 대개 다음 단계를 거쳐 수행된다.
가비지 컬렉터는 루트(root) 정보를 수집하고 이를 ‘mark(기억)’한다.
루트가 참조하고 있는 모든 객체를 방문하고 이것들을 기억한다.
mark 된 모든 객체에 방문하고 그 객체들이 참조하는 객체도 기억 한다. 한번 방문한 객체는 전부 기억하기 때문에 같은 객체를 다시 방문하지는 않는다.
루트에서 도달 가능한 모든 객체를 방문할 때까지 위 과정을 반복,
mark 되지 않은 모든 객체를 메모리에서 삭제한다.
일단 사용되지 않는 것에대해서는 자바스크립트 엔진이 자동적으로 가비지컬렉션에 넣어 메모리에서 삭제한다고 정리한다...