holdanddeepdive/javascript-deep-dive

4장 정리 + GC in JS

Opened this issue · 1 comments

  • 변수(variable) : 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하고자 붙인 이름
  • 호이스팅 : 자바스크립트 엔진은 소스코드를 한 줄씩 실행하기 전 소스코드의 평가과정을 거치는데, 이 과정에서 모든 선언문을 소스코드에서 찾아내 먼저 실행한다. 이후 소스코드를 순차적으로 실행하는 런타임에 값의 할당이 이루어진다.
  • 재할당 : 이전 값과 관계없이 새로운 메모리 공간을 확보하고 그 공간에 새로운 값을 저장한다. 어떤 식별자와도 연결되지 않는 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제된다. (자바스크립트는 명시적으로 GC를 트리거할 수 없다)

자바스크립트의 GC 메커니즘

Garbage Collection in JavaScript
Garbage Collection in JavaScript, GeeksforGeeks

  • Reference Counting Algorithm
    • 변수와 객체의 참조 횟수로 평가, 가장 기본적인 GC 알고리즘의 종류
    • zero reference === garbage, collectible
    • 단, 순환 참조의 경우 추적되지 않는 문제가 있다
    • 굉장히 나이브
// circular ref
function Demo() {
	var one = {};
	var two = {};

	// one reference to two
	one.object = two;

	// two reference to one
	two.object = one;

	return 'circular';
}

Demo();
  • Mark and Sweep Algorithm
    • 루트 객체로부터 자식, 자식의 자식 .. 들을 순회하며 unreachable한 변수와 객체를 찾는다.
    • no longer needed === unreachable
    • RC 알고리즘의 순환 참조 문제를 해결