JS - GC (Garbage Collector)
생각해보면 자바스크립트를 작성하며 무수히 많은 객체, 변수 등을 선언하고 이를 메모리에서 해제하는 작업을 대체로 하지 않았다.
자연스럽게 생각할 수 있지만 이는 JAVA
와 마찬가지로 가비지 컬렉터가 열심히 일하고 있는 까닭이다.
GC(Garbage Collector)
에 대해 간단히 알아보자.
메모리 삭제의 기준
GC
는 도달 가능성(reachability)
여부를 가지고 메모리에서 삭제를 하는 작업을 진행하게 된다. 도달이 가능한지 판단하는 기준점은 루트부터이며, 루트에서 참조할 수 없는 값들은 메모리에서 삭제하는 방식이다.
내부 알고리즘: mark-and-sweep
최적화 기법
아래의 기법 외에 각 브라우저 엔진마다 세부사항 및 다양한 기법이 있을 수 있다.
-
generational collection(세대별 수집): 새로 생성된 객체는 생성 이후 제 역할을 수행 수 금방 쓸모가 없어지는 경향을 기반으로 새로운 객체를 위주로 확인하며 메모리에서 제거하며, 일정 시간 살아남은 객체는 오래된 객체로 분류하게 되며 덜 감시함
-
incremental collection(점진적 수집): 가비지 컬렉션을 여러부분으로 분리한 뒤 별로 작업을 진행, 추가 변경사항에 대한 추적을 하는 추가 작업이 필요하기는함
-
idle-time collection(유휴 시간 수집): CPU가 유휴상태일 때만 가비지 컬렉션을 실행