뚜sh뚜sh

[모던 JavaScript] 4.3 가비지 컬렉션 본문

Language/JavaScript

[모던 JavaScript] 4.3 가비지 컬렉션

뚜sh뚜sh 2023. 1. 30. 15:59

- 자바스크립트는 눈에 보이지 않는 곳에서 메모리 관리를 수행함

- 원시값, 객체, 함수 등 우리가 만드는 모든 것은 메모리를 차지함

- 자바스크립트 엔진 내에선 가비지 컬렉터가 끊임없이 동작함

- 가비지 컬렉터는 모든 객체를 모니터링하고, 도달할 수 없는 객체는 삭제함

- 외부로 나가는 참조는 도달 가능한 상태에 영향을 주지 않음

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

 

 

 

가비지 컬렉션 기준

- 자바스크립트는 도달 가능성이라는 개념을 사용해 메모리 관리를 수행함

- '도달 가능한' 값은 어떻게든 접근하거나 사용할 수 있는 값을 의미함

- 도달 가능한 값은 메모리에서 삭제되지 않음

 

1. 아래 값들은 태생부터 도달 가능하기 때문에, 명백한 이유 없이는 삭제되지 않음

- 현재 함수의 지역 변수와 매개변수

- 중첩 합수의 체인에 있는 함수에서 사용되는 변수와 매개변수

- 전역 변수

- 기타 등등

 

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

 

 

 

도달할 수 없는 섬

- 객체들이 연결된 섬 같은 구조를 만드는데, 최상위를 null값으로 만들어버리면 섬에 도달할 방법이 없으므로, 섬을 구성하는 객체 전부가 메모리에서 삭제됨

 

 

 

내부 알고리즘 (mark-and-sweep)

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

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

- mark된 모든 객체에 방문하고 그 객체들이 참조하는 객체도 mark 함, 한번 방문한 객체는 전부 mark하기 때문에 같은 객체를 다시 방문하는 일은 없음

- 루트에서 도달 가능한 모든 객체를 방문할 때까지 위 과정을 반복함

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

Comments