본문으로 건너뛰기

Garbage-collection

변수를 선언하고 값을 대입하는 것은 내부적으로 메모리 주소에 해당 값이 기록 되는 것이다.

프로그래밍 언어중에서는 메모리를 직접 관리해야하는 언어(C,C++)와, 자체적으로 메모리 관리를 해주는 언어로 나뉜다.

garbage collection이라는 개념은 사용하지 않는

javascript는 memory safe laugaunge 개념으로 나뉜다.

가비지 콜렉팅이 비싼 작업이다.

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

‘도달 가능한(reachable)’ 값은 쉽게 말해 어떻게든 접근하거나 사용할 수 있는 값을 의미합니다. 도달 가능한 값은 메모리에서 삭제되지 않습니다.

아래 소개해 드릴값들은 그 태생부터 도달 가능하기 때문에, 명백한 이유 없이는 삭제되지 않습니다.

예시:

현재 함수의 지역 변수와 매개변수 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수 전역 변수 기타 등등 이런 값은 루트(root) 라고 부릅니다.

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

전역 변수에 객체가 저장되어있다고 가정해 봅시다. 이 객체의 프로퍼티가 또 다른 객체를 참조하고 있다면, 프로퍼티가 참조하는 객체는 도달 가능한 값이 됩니다. 이 객체가 참조하는 다른 모든 것들도 도달 가능하다고 여겨집니다. 자세한 예시는 아래에서 살펴보겠습니다.

자바스크립트 엔진 내에선 가비지 컬렉터(garbage collector)가 끊임없이 동작합니다. 가비지 컬렉터는 모든 객체를 모니터링하고, 도달할 수 없는 객체는 삭제합니다.