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 엔진에 따라 달라질 수 있습니다.
'WIL(Weekly I Learned)' 카테고리의 다른 글
[TIL] react-modal 오류 (that's already open) (1) | 2023.11.14 |
---|---|
useMemo (0) | 2023.11.07 |
[JS] 비동기 함수 동작 방식 (0) | 2023.10.26 |
바닐라 자바스크립트에서 jest 환경 셋팅하기 (0) | 2023.10.13 |
[TypeScript] Generic, interface , type , enum, Class (0) | 2023.05.22 |