쓸모 없어진 객체가 차지하고있는 메모리를 자동으로 비워주는 것
JavaScript, Python, Java 는 가비지 컬렉터
가 자동으로 메모리를 관리를 해준다. 이런 언어를 managed language
라고 한다.
자동으로 Garbage 메모리를 비워준다고 하더라도 100% 완벽하게 정리해주는 것은 아니다. 때문에 가비지 컬렉터를 완전하게 신용한다기 보다 개발자로서 메모리 관리에도 신경을 써야한다.
[Javascript 가비지 컬렉터]
컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상
위에서 말한듯 가비지 컬렉터가 필요 없는 메모리를 완벽하게 비워주는것이 아니기 때문에 코드 작성에 따라 메모리 누수가 발생한다.
메모리 누수의 주된 원인은 '원치 않는 참조' (unwanted references)다. 이것이 무엇인지 알기 위해서는, 가비치 컬렉터가 어떻게 메모리가 여전히 유효한지를 결정하는 방법 이해 해야 한다.
.
.
.
roots라는 전역변수의 집합부터 시작하여, roots가 참조하는 객체 -> 그 자식들이 참조하는 객체 -> ···
위 방식으로 접근 가능한 객체들을 선별하고 그 외 Mark되지 않는 데이터들을 가비지로 판단하는 방법이다.
아래 그림을 보면 더욱 이해하기 쉽다. MARK -> SWEEP -> COMPACT
.
.
.
참조 개수를 카운팅하여 참조가 하나도 없으면 가비지로 판단하는 방법
얇코: 가비지 컬렉터란?
Mdn: Memory Management
Mark-and-sweep
Reference-Counting