쓰레기를 수집한다. 수거한다.
도달 가능성(reachability) 라는 개념을 사용해 메모리 관리
도달 가능한 값은 메모리에서 삭제 되지 않음
아래의 값을 태생부터 도달 가능하기 때문에 삭제 되지 않음
1. 현재 함수의 지역 변수, 매개 변수
2. 중첩 함수의 체인에 있는 변수, 매개변수
3. 전역 변수
자바스크립트 엔진 내에서 가비지 컬렉터가 계속 동작함.
프로그램을 실행하면 메모리의 Resident set이라는 빈 공간이 할당됨.
Resident set은 Stack, Heap으로 나눌 수 있음.
JS는 싱글 스레드기에 Stack 메모리 하나만 가짐.
가비지 컬렉션에서 주의 깊에 볼 것은 Heap
스택은 함수 호출이 끝난 후에 OS에 의해 정리되지만 Heap은 그렇지 않음.
가비지 컬렉션이 일어나는 영역은 Heap 중에서도 New space, Old space이므로 두 space에 대해서 알아보자.
heap -> generation (New, Old space)
New space -> 2개의 semi space로 나뉨
객체는 처음 New space의 첫번째 semi space로 할당
만약 GC로 부터 한번 생존하면 다른 semi space로 이동.
또 한번 생존하면 Old space로 이동
GC는 New space에서는 Minor GC, Old Space에서는 Major GC로 다른 방식으로 동작
마이너 GC에서 한번 살아남으면 다른 semi space로 이동한다했다.
이 때 이동하기 전 있던 space를 From space.
이동할 space를 To space라 칭한다.
이 때 객체는 새로운 메모리 주소값으로 포인터가 갱신됨
Old space의 객체들은 Mark-Sweep-Compact 알고리즘과 Tri-color알고리즘 사용.
기본적으로 더이상 참조되지 않는 객체를 정리하며 3단계로 진행
참고자료
https://fe-developers.kakaoent.com/2022/220519-garbage-collection/ (⭐⭐)
https://ko.javascript.info/garbage-collection
https://velog.io/@bumsu0211/JavaScript-Garbage-Collection (⭐)