가비지 수집(GC)은 자동 메모리 관리의 한 형태입니다. 가비지 수집기 또는 그냥 수집기는 프로그램에서 더 이상 사용하지 않는 개체가 차지하는 메모리 또는 가비지를 회수하려고 시도합니다. 일부 메모리가 "더 이상 필요하지 않은지" 여부를 자동으로 찾는 일반적인 문제는 결정할 수 없습니다. 결과적으로 가비지 수집기는 일반적인 문제에 대한 솔루션의 제한을 구현합니다.
가비지 수집 알고리즘이 의존하는 주요 개념은 참조 개념입니다. 메모리 관리 컨텍스트 내에서 전자가 후자에 액세스할 수 있는 경우 해당 개체는 다른 개체를 참조한다고 합니다(암시적 또는 명시적으로).
예시
let a = [] function addToA() { let x = {name: "John"} a.push(x) } console.log(a[0])
출력
{name: "John"}
x 는 더 이상 범위에 없지만 를 사용하여 계속 액세스할 수 있습니다. 이것은 참조가 더 이상 존재하지 않을 때까지 메모리에 남아 있어야 함을 의미합니다. 배열에서 꺼내면 더 이상 필요하지 않으며 가비지 수집될 수 있습니다.
가비지 수집기는 다음 알고리즘을 사용하여 작동합니다. −
1. 참조 카운팅 가비지 컬렉션 − 개체를 가리키는 참조가 0인 경우 개체를 "가비지" 또는 수집 가능한 개체라고 합니다. 이것은 이전 브라우저에서 사용됩니다. 그러나 이것은 수집할 수 없기 때문에 순환 참조 객체에 문제를 일으킵니다(항상 다른 객체에서 객체에 대한 참조가 있습니다. )
2. Mark-and-sweep 알고리즘 − 이 알고리즘은 "객체가 더 이상 필요하지 않음"의 정의를 "객체에 연결할 수 없음"으로 줄입니다. 이 알고리즘은 루트라는 개체 집합에 대한 지식을 가정합니다. JavaScript에서 루트는 전역 객체입니다. 주기적으로 GC는 이러한 루트에서 시작하여 이 루트에서 참조되는 모든 객체를 재귀적으로 찾습니다. 따라서 GC는 루트에서 시작하여 연결할 수 있는 모든 개체를 찾고 연결할 수 없는 모든 개체를 수집합니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
에서 자바스크립트의 GC에 대해 자세히 알아볼 수 있습니다.