Garbage Collection
by EarlyHail
Garbage
Garbage는 Program이 접근하지 못하는 Heap 메모리 block이다.
Garbage는 Heap에 할당된 블록에 대한 참조가 존재하지 않거나 / 더 이상 존재하지 않는 블록에 대한 참조가 있을 때 발생한다.
Garbage Collection
Garbage Collection은 사용되지 않는 Heap 메모리의 영역들을 회수하는 것이다.
1. Reference Counting
-
자신을 참조하고 있는 객체의 개수를 계산하여 더 이상 필요하지 않은 객체의 할당을 해제한다.
-
Heap에
할당이 발생할 때 마다
알고리즘이 실행된다. -
Garbage 발생 즉시 할당을 해제할 수 있다.
-
순환 참조일 경우 Garbage를 수거할 수 없는 상황이 발생한다.
2. Mark-and-Sweep
-
접근 가능한 객체들을 표시하여 표시되지 않은 객체의 할당을 해제한다.
-
Heap Overflow가 발생할 때 알고리즘이 실행된다.
-
대부분의 최신 브라우저의 JavaScript는 Mark-and=Sweep 알고리즘을 사용한다.
Copy Collection
-
Heap을 두 영역으로 나눠 한 영역만 사용한다.
-
영역의 접근 가능한 객체들을 다른 영역으로 copy하고 원래 사용하던 영역을 삭제한다.