[자바스크립트의 메모리관리] 스터디(https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management)
고수준 언어인 JavaScript는 사용하지 않는 메모리를 자바스크립트 엔진이 추정하여 삭제하는 Garbage Collection
을 가지고 있다.
var me = { age: 30 }; // 1. 할당
console.log(me) // 2. 사용
me = null; // 3. 해제
A. 메모리가 더 이상 필요없을 때
var me = { age: 30 }; // 참조 카운팅 1개
var you = me; // 2개
me = null; // 1개
you = null; // 0개
=> 참조 카운팅이 0이 되면 메모리에서 삭제한다.
Q. 순환 참조의 문제
1. 자신에 대한 순환 참조를 가지고 있을 때, 참조 카운팅은 1개 이상이 계속 유지되고 있어 메모리가 해제되지 않는다.
2. 함수가 호출될 때 호출 완료 후에 메모리는 회수되어야 하지만 서로 참조하고 있는 객체가 있으면 메모리가 해제되지 않는다.
=> 메모리 누수 발생
A. Mark-and-sweep 알고리즘
: roots
라는 오브젝트의 집합 (전역 변수)
roots
가 참조하는 오브젝트들(chaining되는 오브젝트들)을 닿을 수 있는 오브젝트
라고 한다.
명시(수동)적으로, 프로그래밍으로 가비지 컬렉션을 작동할 수 없다는 한계가 있다.