자바스크립트 가비지 컬렉션

kiki97 ㅣ 2022. 8. 29. 21:27

반응형

가비지 컬렉션(Garbage Collection)

자바스크립트는 객체가 생성되었을 때 자동으로 메모리를 할당하고 더 이상 필요하지 않을 때 자동으로 해제한다.

가비지 컬렉션은 엔진이 자동으로 수행하므로 개발자는 이를 억지로 실행하거나 막을 수 없다.


가비지 컬렉션 기준

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

'도달 가능한' 값은 쉽게 말해 어떻게든 접근하거나 사용할 수 있는 값을 의미한다.

도달 가능한 값은 메모리에서 삭제되지 않는다. 참조된다고 해서 도달 가능한 것은 아니고,

서로 연결된 객체들도 도달 불가능할 수 있다.

 

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

 

이런 값들을 루트(root)라고 부른다.

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


내부 알고리즘

'mark-and-sweep’이라 불리는 가비지 컬렉션 기본 알고리즘에 대해 알아보자

  • 가비지 컬렉터는 루트(root) 정보를 수집하고 이를 'mark(기억)'한다.
  • 루트가 참조하고 있는 모든 객체를 방문하고 이것들을 'mark'한다.
  • mark가 된 모든 객체에 방문하고 그 객체들이 참조하는 객체도 mark한다. 한번 방문한 객체는 전부 mark하기 때문에
    같은 객체를 다시 방문하는 일은 없다.
  • 루트에서 도달 가능한 모든 객체를 방문할 때 까지 위 과정을 반복한다.
  • mark되지 않은 모든 객체를 메모리에서 삭제한다.
반응형