[JavaScript] 가비지 컬렉션 Garbage Collection

suno·2022년 11월 29일
0

가비지 컬렉터란?

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

도달 가능한(Reachable) 값

도달 가능한 값이란, 어떻게든 접근하거나 사용할 수 있는 값을 말한다. 도달 가능한 값은 메모리에서 삭제되지 않는다.

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

위와 같은 변수들을 루트(Root)라고 부르며 태생부터 도달 가능하기 때문에, 명백한 이유 없이 삭제되지 않는다.

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

동작 방법

JavaScript에서 object를 참조하는 변수를 선언하면
변수에 stack 주소 값이 저장되고 → stack에 object 주소값이 저장되고 → heap에 object 값이 저장된다.

Object를 참조하는 변수가 없을 때 (도달할 수 없는 상태가 될 때), Garbage Colletor가 메모리를 해제한다.

예시

John은 외부에서 들어오는 참조가 없으므로 도달 가능한 상태가 아니고, GC에 의해 메모리에서 삭제된다.

도달할 수 없는 섬

객체가 외부에서 들어오는 참조를 가지고 있는 것만으로 도달 가능한 상태인 것은 아니다.

JohnAnn은 서로를 참조하고, 두 객체 모두 외부에서 들어오는 참조를 가지고 있지만 도달 가능한 상태가 아니다.
왜냐하면, family라는 루트 객체를 참조하는 것이 아무것도 없기 때문이다.

섬 전체가 도달할 수 없는 상태가 되고, 객체 전부가 메모리에서 제거된다.








Reference
https://ko.javascript.info/garbage-collection

profile
Software Engineer 🍊

0개의 댓글