가비지 컬렉션

JavaScript는 눈에 보이지 않는 곳에서 메모리 관리를 수행합니다.

원시값, 객체, 함수 등 우리가 만드는 모든 것은 메모리를 차지합니다. 그렇다면 더는 쓸모 없어지게 된 것들은 어떻게 처리될까요? 지금부터 JavaScript 엔진이 어떻게 필요 없는 것을 찾아내 삭제하는지 알아보겠습니다.

정의

가비지 컬렉터는 루트(root) 정보를 수집하는데, 루트가 참조하고 있는 모든 객체를 mark(기억)하고, mark(기억)된 객체를 제외한 루트가 접근 할 수 없는 참조 객체들을 가비지 컬렉터에 의해 삭제되어 메모리 관리가 이루어 집니다.

즉, 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값을 제외하고는 가비지 컬렉터에 의해 메모리 관리가 이루어 집니다.

가비지 컬렉션 기준

JavaScript는 도달 가능성(reachability) 이라는 개념을 사용해 메모리 관리를 수행합니다.

‘도달 가능한(reachable)’ 값은 쉽게 말해 어떻게든 접근하거나 사용할 수 있는 값을 의미합니다. 도달 가능한 값은 메모리에서 삭제되지 않습니다.

아래 소개할 값들은 그 태생부터 도달 가능하기 때문에, 명백한 이유 없이는 삭제되지 않습니다.

이런 값은 루트(root)라고 부릅니다.

루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이 됩니다.