자바스크립트 엔진 내에서 가비지 컬렉터가 끊임 없이 동작하며, 모든 객체를 모니터링 하고 도달할 수 없는 객체
를 삭제한다.
도달 가능한 값
이란, 어떻게든 접근하거나 사용할 수 있는 값을 말한다. 도달 가능한 값은 메모리에서 삭제되지 않는다.
위와 같은 변수들을 루트(Root)
라고 부르며 태생부터 도달 가능하기 때문에, 명백한 이유 없이 삭제되지 않는다.
루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값이 도달 가능한 값이다.
JavaScript에서 object를 참조하는 변수를 선언하면
변수
에 stack 주소 값이 저장되고 → stack
에 object 주소값이 저장되고 → heap
에 object 값이 저장된다.
Object를 참조하는 변수가 없을 때 (도달할 수 없는 상태가 될 때), Garbage Colletor
가 메모리를 해제한다.
John
은 외부에서 들어오는 참조가 없으므로 도달 가능한 상태가 아니고, GC에 의해 메모리에서 삭제된다.
객체가 외부에서 들어오는 참조를 가지고 있는 것만으로 도달 가능한 상태인 것은 아니다.
John
과 Ann
은 서로를 참조하고, 두 객체 모두 외부에서 들어오는 참조를 가지고 있지만 도달 가능한 상태가 아니다.
왜냐하면, family
라는 루트 객체를 참조하는 것이 아무것도 없기 때문이다.
섬 전체가 도달할 수 없는 상태가 되고, 객체 전부가 메모리에서 제거된다.