가비지 컬렉션이란?

가비지(Garbage) = 더 이상 사용하지 않는 메모리

자바스크립트는 값을 초기화 할 때 알아서 메모리를 할당해 준다.

const num = 123;
const string = 'String';
const object = { a : 1 , b: 2 };
// 각각 메모리 할당이 일어난다.

메모리를 할당하기만 하고, 가비지를 회수하지 않는다면 메모리 누수가 생길 수 도 있다.

자바스크립트는 이때 할당된 메모리들이 더 이상 사용되지 않는다면 자동으로 메모리를 반환하게 되는데 이런 현상을 가비지 컬렉션 이라고 부른다.

function stb() {
  const one = 355;
  const two = 145;
  const sum = one + two;
  // 
  return sum; // return 이후 one, two,sum은 필요하지 않게되므로 가비지컬렉션 대상에 포함된다.
}
let x = {
  a: {
    b:"jsbeginner"
  }
};

let y = x;
x = "garbage"; // y는 x Object를 참조하는 유일한 변수가 되었다.

let z = y.a; // 이제 y.a는 두 개의 참조를 가진다.

y = "yo"; // 이제 기존 x를 참조하는 Object는 없다 하지만 x.a(y.a)를 아직 참조하는 z변수가 존재하기에 가비지 콜렉션은 수행되지 않는다.

z = null;  // 이제 z변수마저 참조를 풀었으니 기존 x변수가 참조했던 Object를 참조하는 변수는 아무것도 없다. 이때 가비지 콜렉션이 수행된다.

순환 참조

function f(){
  var o = {};
  var o2 = {};
  o.a = o2; // o는 o2를 참조한다.
  o2.a = o; // o2는 o를 참조한다.
    // 둘은 서로를 계속 참조하기에 가비지 컬렉션 대상에 포함되지 못한다.
  // 이러한 순환 참조는 메모리 누수의 원인이 된다.
  return "azerty";
}

f();

'프로그래밍 > JavaScript' 카테고리의 다른 글

함수형 프로그래밍  (0) 2019.06.08
오류에 대해서  (0) 2019.06.07
예외처리  (0) 2019.06.03
인라인 이벤트모델, 표준 이벤트 모델  (0) 2019.06.03
고전 이벤트 모델  (0) 2019.06.03