Javascript는 엔진 내의 가비지 컬렉터(Garbage Colloector)에서 메모리 관리를 수행한다.
이때 GC 기준은 도달가능성(Reachability)라는 개념이 사용된다.
루트(Root) : 태생부터 도달이 가능하여 명백한 이유없이는 삭제되지 않는 값
루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이다.
GC가 자동하는 내부 알고리즘은 "mark-and-sweep"이다.
※ 중요한 점은, 루트를 출발지로해서 참조가 되어 도달 가능한 객체여야 삭제가 안된다는 점이다. 루트가 접근할 수 없고 지들끼리 참조하는 객체 덩어리를 "도달할 수 없는 섬(Unreachable Island)"이라고 한다.
가비지 컬렉션에 대해서 상세히 공부한 것은 처음인 것 같다.
정보처리기사나 전공 이론을 통해 공부를 할 때에는 특정 메모리 전체에서 일부 메모리가 비어 있을 때, 이 비어있는 메모리를 어떻게 합칠 것인가에 대한 공부를 했었다.
이러한 이론적인 측면에서는 말 그대로 Software적 관점에서의 메모리 가비지 컬렉션을 의미하는 바였고, 자바스크립트의 가비지 컬렉션 수행방식은 완전 다른 개념이라는 것을 알게 됐다.
자바스크립트 외에 C언어, 자바, 파이썬들의 가비지 컬렉션 방식들은 어떻게 되는지 궁금하다.