가비지 컬렉션 (Garbage Colloector)

심서현·2022년 11월 11일
1
post-thumbnail

자바스크립트 엔진이 필요없는 메모리를 찾아내 삭제하는 메모리 관리



기준

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

  • 도달 가능성(reachability) : 어떻게든 접근하거나 사용할 수 있는 값

태생부터 도달 가능하기에, 명백한 이유 없이 삭제되지 않는것을 루트(root)라고 한다.

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

루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이다.



내부 알고리즘

'mark-and-sweep' 이라 불리는 가비지 컬렉션 기본 알고리즘
쉽게 표현한다면 루트(root)에서 페인트를 부어 페인트가 묻지 않은 객체를 메모리에서 제거하는 것이다.

  1. 루트(root) 정보를 수집하고, 이를 기억(mark)한다.
  2. 루트(root)가 참조하고 있는 모든 객체를 방문하고, 이를 기억(mark)한다.
  3. 기억(mark)된 모든 객체를 방문하고, 그 객체들이 참조하는 객체들도 기억(mark)한다. 이를 참조하는 객체가 없을때까지 반복한다.
  4. 기억(mark)되지않은 모든 객체를 메모리에서 삭제한다.



요약

  • 가비지 컬렉션은 엔진이 자동으로 수행하므로 개발자는 이를 억지로 수행하거나 막을 수 없다.
  • 객체는 도달 가능한 상태일때 메모리에 남는다.
  • 참조된다고 해서 도달 가능한 것은 아니다. 서로 연결된 객체들도 도달 불가능 할 수 있다.
    • 외부에서 들어오는 참조만이 도달 가능한 상태에 영향을 주기 때문이다.
profile
안녕하세요?

0개의 댓글

관련 채용 정보