[JavaScript] Garbage Collection

jiseung·2021년 12월 20일
0

JavaScript

목록 보기
3/5

[자바스크립트의 메모리관리] 스터디(https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management)

Garbage Collection

고수준 언어인 JavaScript는 사용하지 않는 메모리를 자바스크립트 엔진이 추정하여 삭제하는 Garbage Collection을 가지고 있다.

메모리 생존 주기

  1. 할당
  2. 사용 (읽기, 쓰기)
  3. 해제
var me = { age: 30 }; // 1. 할당
console.log(me) // 2. 사용
me = null; // 3. 해제

Garbage Collection이 언제 메모리를 해제하는가

A. 메모리가 더 이상 필요없을 때

1. 참조 카운팅

var me = { age: 30 }; // 참조 카운팅 1개
var you = me; // 2개
me = null; // 1개
you = null; // 0개

=> 참조 카운팅이 0이 되면 메모리에서 삭제한다.

Q. 순환 참조의 문제
1. 자신에 대한 순환 참조를 가지고 있을 때, 참조 카운팅은 1개 이상이 계속 유지되고 있어 메모리가 해제되지 않는다.
2. 함수가 호출될 때 호출 완료 후에 메모리는 회수되어야 하지만 서로 참조하고 있는 객체가 있으면 메모리가 해제되지 않는다.
=> 메모리 누수 발생

A. Mark-and-sweep 알고리즘

2. Mark-and-sweep 알고리즘

: roots 라는 오브젝트의 집합 (전역 변수)
roots가 참조하는 오브젝트들(chaining되는 오브젝트들)을 닿을 수 있는 오브젝트라고 한다.

  1. 함수 리턴 후 서로 닿을 수 없는 오브젝트들에 대해 가비지 콜렉션
  2. root로부터 닿을 수 없어지면 자신에 순환 참조에도 불구하고 가비지 콜렉션

명시(수동)적으로, 프로그래밍으로 가비지 컬렉션을 작동할 수 없다는 한계가 있다.

profile
Frontend Web Developer

0개의 댓글