본문으로 바로가기

garbage collector

category JavaScript/기초 2020. 10. 23. 15:19

우리가 만든 함수나 객체 중에 더이상 사용되지않는 것들이 있을 때

가비지 컬렉터가 그것들을 삭제해서 메모리를 관리해준다

그럼 메모리 관리의 기준은 어떻게 될까?

바로 도달 가능성이라는 개념을 이용하는데 이 개념을 갖고 있지 않은 값들은 삭제되고

아래와 같이 도달 가능성을 가지고 있는 값들은 삭제되지 않는다

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

이런 값들은 루트라고 부르고 이 루트들이 체이닝으로 참조하는 값들도 도달 가능성을 가지고 있기 때문에 삭제되지않는다

이 가비지 컬렉터는 다양한 알고리즘을 가지고 있지만 기본적으로 끊임없이 작동하고 있는다

예시를 보자

let user = {
    name: "John"
};

그림처럼 user가 객체를 참조하고있다

만약 user의 참조가 끊어진다면 어떻게 될까?

user = null;

{name : "John"} 객체를 유일하게 참조하고 있던 user의 연결이 끊어져 더 이상 도달 가능한 값이 아니기 때문에 가비지 컬렉터가 이를 수집해간다

let user = {
    name: "John"
};

let admin = user;

user = null;

이러한 경우에는 user의 참조가 끊어졌어도 admin의 참조가 남아있어 도달 가능성을 가지고 있기 때문에

가비지 컬렉터의 수집 대상이 아니다


내용 참고, 그림 출처 : https://ko.javascript.info/garbage-collection

'JavaScript > 기초' 카테고리의 다른 글

Array.sort  (0) 2020.10.22
prototype  (0) 2020.10.03
closure  (0) 2020.10.03
호출 스택, 이벤트 루프  (0) 2020.10.02
생성자 함수  (0) 2020.10.01