가비지 컬렉션

김민규·2022년 10월 20일
0

자바스크립트

목록 보기
7/7
post-thumbnail

자바스크립트는 메모리 관리를 알아서 하는데요. 어떻게 관리하는지 알아보겠습니다.

도달 가능성(Reachability)

어떻게든 접근, 사용할 수 있는 객체는 정리하지 않습니다.

let user = {
  name: 'Jason'
};

전역 변수 user는 name 속성을 가지는 객체를 참조합니다. 우리는 user를 통해 객체에 접근하죠. user의 값을 null로 바꾸면,

user = null;

참조가 사라집니다. 객체에 접근할 수 없으니 사용할 수 없죠. 가비지 컬렉터는 이 객체를 메모리에서 제거합니다.

어떻게든 접근할 수 있다면

let user = {
  name: 'Jason'
};

let manager = user;

user = null;

위 코드에서 user의 참조는 사라졌습니다. 하지만 manager를 통해 접근할 수 있죠. 따라서 가비지 컬렉터는 이 객체를 메모리에서 제거하지 않습니다.

모든 가능성을 제거하라!

const Game = {
  player: {
    name: 'Dovahkiin',
  },
  boss: {
  	name: 'Alduin',
  },
};

Game.player.enemy = Game.boss;
Game.boss.enemy = Game.player;

게임 속 플레이어는 우여곡절(?) 끝에 보스를 제거했습니다.

delete Game.player.enemy;

하지만 보스는 게임 속에 여전히 존재합니다.(Game.boss) 이쯤에서 플레이어가 자비를 베풀어 살려줄 수 있겠죠. 하지만 보스는 보스! 복수의 반격이 있을 수 있으니, 확실히 끝내야죠. 😑

delete Game.boss;
profile
점점 더 좋아지고 있습니다

0개의 댓글