오늘은 자바스크립트의 가비지 컬렉션에 대해 공부했다.
가비지 컬렉션 기준
자바스크립트는 도달 가능성이라는 개념을 사용해 메모리 관리를 수행한다. 도달 가능한이라는 의미는 어떻게든 접근하거나 사용할 수 있는 값을 의미한다. 도달 가능한 값들은 메모리에서 삭제되지 않는다. 다음과 같은 값들은 태생부터 도달할 수 있기 때문에 명백한 이유 없이 삭제되지 않는다.
- 현재 함수의 지역 변수와 매개 변수
- 전역 변수
- 중첩 함수 체인에 있는 함수에서 사용되는 변수와 매개변수
결국, 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이 된다.
자바스크립트 엔진내에서 가비지 컬렉터가 끊임없이 동작한다. 따라서, 모든 객체를 모니터링하고 도달할 수 없는 객체는 삭제된다.
가비지 컬렉션 알고리즘
자바스크립트의 가비지 컬렉션 알고리즘은 Reference-counting과 Mark-and-sweep으로 두 가지가 있고 두 가지 중 현재 많은 브라우저에서 선택하고 있는 알고리즘은 Mark-and-sweep이다. Mark-and-sweep 알고리즘은 앞서 얘기했듯이 도달할 수 없는 객체를 가비지로 판단한다. Mark-and-sweep 알고리즘은 루트 정보를 수집하고 기억하며, 루트가 참조하고 있는 모든 객체를 방문하고 마크한다. 모든 객체를 방문할 때까지 이 과정을 반복한다. 가비지 컬렉터는 자동으로 실행되므로 강제로 멈추거나 실행할 수 없으며 모던 JavaScript 튜토리얼에 따르면 자바스크립트 엔진은 실행에 영향을 미치지 않으면서 가비지 컬렉터 성능을 증가시키기 위한 최적화 기법을 사용한다고 한다.
'TIL' 카테고리의 다른 글
TIL - 20221012 (0) | 2022.10.12 |
---|---|
TIL - 20221011 (0) | 2022.10.11 |
TIL - 20221009 (0) | 2022.10.09 |
TIL - 20221008 (객체와 Map 성능 차이) (0) | 2022.10.08 |
TIL - 20221007 (LRU) (0) | 2022.10.07 |