가비지 컬렉션 ( Garbage Collection )

더이상 쓸모 없어진 메모리들을 자바스크립트 엔진이 찾아내 삭제하는것

자바 스크립트는 도달 가능성(reachability)개념을 사용해 메모리를 관리

  • 태생부터 도달 가능한 메모리를 루트라고 부른다.

    • 현재함수의 지역변수, 매개변수

    • 중첩함수의 체인에 있는 함수의 변수, 매개변수

    • 전역변수 등등

  • 루트가 참조하는 값이나 루트에서 참조할 수 있는 값은 도달가능한 값

  • js엔진 내에서 가비지 컬렉터가 끊임없이 동작해, 도달할 수 없는 객체는 삭제

내부 알고리즘

mark-and-sweep이라는 가비지 컬렉션 기본 알고리즘으로 동작한다.

수행 단계

  1. 가비지 컬렉터는 루트 정보를 수집하고 이를 mark(기억)

  2. 루트가 참조하고 있는 모든 객체를 방문하고 이것들을 mark

  3. mark된 모든 객체에 방문하고 이들이 참조하고 있는 객체도 mark 방문한 객체는 방문 x

  4. mark되지 않은 모든 객체를 메모리에서 삭제

최적화 기법

  • 세대별 수집(generational collection) : 새로운 객체와 일정시간 오래 살아남은 오래된 객체로 구분하여 오래된 객체는 덜 감시하는 방법

  • 점진적 수집(incremental collection) : 방문해야할 객체가 많다면 많은 시간이 소요되기 때문에, 가비지 컬렉션을 여러 부분으로 분리하여 각 부분을 별도로 수행하는 방법

  • 유휴 시간 수집(idle-time collection) : cpu가 유휴 상태일때만 가비지 컬렉션을 실행하는 방법

이 외에도 많은 알고리즘과 최적화 기법이 존재한다.

Last updated