가비지 컬렉션

서성원·2024년 2월 22일

자바스크립트

목록 보기
1/6
post-thumbnail

가비지 컬렉션

  • 도달가능성(reachability)라는 개념을 사용해 메모리 관리를 수행한다.

태생부터 도달 가능한 값 (root)

  • 현재 함수의 지역 변수와 매개변수
  • 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수
  • 전역 변수 등

JS 엔진 내에서 가비지 컬렉터는 끊임없이 동작한다. 가비지 컬렉터는 모든 객체를 모니터링하며, 도달할 수 없는 객체는 삭제한다.

가비지 컬렉션 기본 알고리즘

mark-and-sweep

  • 루트 정보를 수집하고 mark(기억)한다.
  • 루트가 참고하는 모든 객체를 방문하고 이것을 mark한다.
  • mark된 모든 객체에 방문하고 그 객체들이 참조하는 객체도 mark한다. 한 번 방문한 객체는 모두 mark하므로 다시 방문하지 않는다.
  • 루트에서 도달 가능한 객체를 방문할 때까지 위 과정을 반복한다.
  • mark되지 않은 모든 객체를 메모리에서 삭제한다. => 도달할 수 없는 섬

최적화 기법

  • generational collection(세대별 수집) : 객체는 생성 이후 대부분 제역할을 빨리 수행해 쓸모없어지는데, 이것을 '새로운 객체'로 구분하고 나머지는 '오래된 객체'로 구분한다. 가비지 컬렉터는 '새로운 객체'를 공격적으로 메모리에서 제거하고, '오래된 객체'는 덜 감시한다.

  • incremental collection(점진적 수집) : 방문할 객체가 많으면 한 번에 방문하고 mark하는데 상당한 시간이 소요된다. 리소스 증가로 실행 속도도 느려진다. 자바스크립트 엔진은 가비지 컬렉션을 여러 부분으로 분리하고 각 부분을 별도로 수행한다. 긴 지연이 짧은 여러 개의 지연으로 분리된다.

  • idle-time collection(유휴 시간 수집) : 가비지 컬렉터는 CPU가 유휴 상태일 때만 가비지 컬렉션을 실행한다.

profile
FrontEnd Developer

0개의 댓글