우리가 만든 함수나 객체 중에 더이상 사용되지않는 것들이 있을 때
가비지 컬렉터가 그것들을 삭제해서 메모리를 관리해준다
그럼 메모리 관리의 기준은 어떻게 될까?
바로 도달 가능성이라는 개념을 이용하는데 이 개념을 갖고 있지 않은 값들은 삭제되고
아래와 같이 도달 가능성을 가지고 있는 값들은 삭제되지 않는다
- 현재 함수의 지역 변수와 매개변수
- 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수
- 전역 변수
이런 값들은 루트라고 부르고 이 루트들이 체이닝으로 참조하는 값들도 도달 가능성을 가지고 있기 때문에 삭제되지않는다
이 가비지 컬렉터는 다양한 알고리즘을 가지고 있지만 기본적으로 끊임없이 작동하고 있는다
예시를 보자
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 |