1. 가비지 컬렉션 개념


원시값,객체,함수 등 우리가 만드는 모든 것은 메모리를 차지한다. 그렇다면 더는 쓸모 없게된 것들은 어떻게 처리하는가?

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

즉, 가비지 컬렉션은 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것

(자바, 자바스크립트, C#은 이 기능을 가지고 있음)

2. 가비지 컬렉션 기준


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

‘도달 가능한(reachable)’ 값은 쉽게 말해 어떻게든 접근하거나 사용할 수 있는 값을 의미한다.

  1. 아래에 있는 값들은 명백한 이유없이 삭제되지 않는다.

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

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

    전역 변수에 객체가 저장되어있다고 가정해 보자, 이 객체의 프로퍼티가 또 다른 객체를 참조하고 있다면, 프로퍼티가 참조하는 객체는 도달 가능한 값이 된다. 이 객체가 참조하는 다른 모든 것들도 도달 가능하다고 여겨진다.

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

e.g. 참조 1개

let user = {
  name : 'james'
}
// user에는 객체 참조 값이 저장된다.

스크린샷 2022-04-07 오후 4.07.39.png

전역 변수 user는 {name : ‘james’}라는 객체를 참조한다. (james의 프로퍼티 ‘name’은 원시값을 저장하고 있기 때문에 객체 안에 표현했다)