WIL(Weekly I Learned)

JavaScript 가비지 컬렉션

borobong230 2023. 11. 5. 11:43

mark & sweep 알고리즘 이란?

가비지 컬렉션이 동작할 때 사용하는 알고리즘 입니다.

간단하게 설명하면 루트 요소를 시작하여 도달할  있는  찾아서 분류합니다

 

예를 들면

도달할 수 있는 값은 1, 도달할 수 없는 값은 0으로 분류하고

도달할 수 없는 값들은 가비지 컬렉션에서 지우는 방식입니다.

 

가비지 컬렉션이 자바스크립트에서 작동하는 원리

 

앞서 말한대로 가비지 컬렉션은 값에 도달할 수 있느냐 ? 유무에 따라 해당 값을 지울지 말지 결정합니다.

 

일반적으로 우리가 사용하는 코드로 예시를 들어보면 다음과 같습니다.

let student = { name: "John" };
student = 3;
student = null;

 

도달할 수 있는 코드가 무엇인지 한 줄씩 설명을 해보면

 

1. student 변수 선언 및 객체 할당

student 변수가 객체를 참조합니다. 
이때 John이라는 값과 student.name은 도달할 수 있는 값입니다

let student = { name: "John" };

 

 

2. student 재할당 

이제 student 변수는 숫자 3을 참조합니다. 

이렇게 되면 기존에 있던 {name: "John"} 이라는 객체는 도달할 수 없는 값이 되어 버리고 GC에서 Sweep(청소) 대상이 됩니다.

student = 3;

 

 

3. student 재할당

student 변수가 null을 참조합니다. 3이라는 값도 도달할 수 없는 값이 되어버리고  GC에서 Sweep(청소) 대상이 됩니다.

student = null;

 

 

GC 의 동작 시점은 javascript 엔진에 따라 달라질 수 있습니다.