자바스크립트는, 눈에 보이지 않는 곳에서 메모리 관리를 수행한다.

원시값, 객체, 함수 등 우리가 만드는 모든 것은 메모리를 차지한다. 그렇다면, 더는 쓸모없어진 것들을 어떻게 처리해야할까? 지금부터는 자바스크립트의 엔진이 어떻게 필요없는 것을 찾아내 삭제하는지 알아볼 것이다.

가비지 컬렉션 기준

자바스크립트는 '도달 가능성(reachability)'이라는 개념을 사용해 메모리 관리를 수행한다.

'도달 가능한'값은 쉽게 말해서 어떻게든 접근하거나 사용할 수 있는 값을 의미하며, 도달 가능한 값은 메모리에서 사라지지 않는다.

특히, 아래의 값들은 태생부터 도달 가능하기 때문에, 절대 삭제되지 않는다.

이러한 값들을 '루트'라고 부른다.

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

지역 변수에 객체가 저장되어있다고 가정해자.

이 객체의 프로퍼티가 또 다른 객체를 참조하고 있다면, 프로퍼티가 참조하는 객체는 도달 가능한 값이 됩니다. 이 객체가 참조하는 다른 모든 것들도 도달 가능하다고 여겨집니다.

자바스크립트 엔진 내에선 가비지 컬렉터(garbage collector)가 끊임없이 동작한다. 가비지 컬렉션은 모든 객체를 모니터링하고 도달할 수 없는 객체를 삭제한다.

간단한 예시

// user엔 객체 참조 값이 저장됩니다.
let user = {
  name: "John"
};