자바스크립트는 메모리를 직접 할당해야 하는 저수준 언어와 달리 객체가 생성되었을 때 자동으로 메모리를 할당하고 쓸모 없어졌을 때 자동으로 해체한다(가비지 컬렉션).
두번째 부분은 모든 언어에서 명시적으로 사용된다. 그러나 첫 번째 부분과 마지막 부분은 저수준언어에서는 명시적이며, 자바스크립트와 같은 대부분의 고수준 언어에서는 암묵적으로 작동한다.
자바스크립트와 같은 고수준 언어들은 "가비지 콜렉션"이라는 자동 메모리 관리 방법을 사용한다. 가바지 콜렉터의 목적은 메모리 할당을 추적하고 할당된 메모리 블록이 더이상 필요하지 않게되면 판단하여 회수하는 것이다.
"더 이상 필요하지 않은"모든 메모리를 찾는건 비결정적 문제다. 따라서 가비지컬렉터들은 이 문제에 대한 제한적인 해결책을 구현한다.
참조
가비지 컬렉션 알고리즘의 핵심은 참조이다. A라는 메모리를 통해(명시적이든 암시적이든) B라는 메모리에 접근할 수 있다면 "B는 A에 참조된다"라고한다.
가비지 컬렉션 기준 : 자바스르킵트는 도달 가능성이라는 개념을 통해 메모리 관리를 수행한다. "도달가능한"값은 쉽게 말해 어떻게던 접근하거나 사용할 수 있는 값을 의미한다. 도달가능한 값은 메모리에서 삭제되지 않는다.
자바스크립트 엔젠 내에서 가비지 컬렉터가 끊임없이 작동합니다. 가비지 컬렉터는 모든 객체를 모니터링하고 도달할 수 없는 객체는 삭제합니다.
밑에 값은 태생부터 도달 가능하기 때문에 명백한 이유없이는 삭제되지 않는다.
ex) 현재함수의 지역변수와 매개변수,전역변수,기타등등
루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이된다.
내부알고리즘
-"mark and sweep"라 불리는 가비지 컬렉션 기본 알고리즘에 대해 알아보자.
요약