JavaScript는 눈에 보이지 않는 곳에서 메모리 관리를 수행합니다.
원시값, 객체, 함수 등 우리가 만드는 모든 것은 메모리를 차지합니다. 그렇다면 더는 쓸모 없어지게 된 것들은 어떻게 처리될까요? 지금부터 JavaScript 엔진이 어떻게 필요 없는 것을 찾아내 삭제하는지 알아보겠습니다.
가비지 컬렉터는 루트(root) 정보를 수집하는데, 루트가 참조하고 있는 모든 객체를 mark(기억)
하고, mark(기억)
된 객체를 제외한 루트가 접근 할 수 없는 참조 객체들을 가비지 컬렉터에 의해 삭제되어 메모리 관리가 이루어 집니다.
즉, 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값을 제외하고는 가비지 컬렉터에 의해 메모리 관리가 이루어 집니다.
JavaScript는 도달 가능성(reachability)
이라는 개념을 사용해 메모리 관리를 수행합니다.
‘도달 가능한(reachable)’ 값은 쉽게 말해 어떻게든 접근하거나 사용할 수 있는 값을 의미합니다. 도달 가능한 값은 메모리에서 삭제되지 않습니다.
아래 소개할 값들은 그 태생부터 도달 가능하기 때문에, 명백한 이유 없이는 삭제되지 않습니다.
→ 이런 값은 루트(root)
라고 부릅니다.
루트가 참조
하는 값이나 체이닝으로 루트에서 참조
할 수 있는 값은 도달 가능한
값이 됩니다.