javascript/모던 자바스크립트 Deep Dive
가비지 콜렉터
yongfront
2024. 2. 2. 12:10
반응형
SMALL
가비지 콜렉터(Garbage Collector)는 프로그램이 동적으로 할당한 메모리 중에서 더 이상 사용되지 않는 메모리를 자동으로 탐지하고 해제하는 기능을 수행하는 컴퓨터 프로그램 또는 일부 언어의 런타임 환경에서 제공하는 기능입니다. 가비지 콜렉터는 메모리 누수(Memory Leak)를 방지하고 프로그램의 안정성과 성능을 향상시키는 데 도움이 됩니다.
가비지 콜렉션은 다음과 같은 주요 원리로 동작합니다:
- 참조 계산(Reference Counting): 가장 간단한 형태의 가비지 콜렉션은 참조 계산을 사용합니다. 이 방식에서는 객체가 다른 객체에 의해 참조될 때마다 참조 횟수를 증가시키고, 참조가 끊길 때마다 참조 횟수를 감소시킵니다. 참조 횟수가 0이 되면 해당 객체는 더 이상 사용되지 않으므로 메모리에서 해제됩니다. 이 방식은 간단하지만 순환 참조(객체들이 서로를 참조하는 경우)에 취약하며 이로 인해 메모리 누수가 발생할 수 있습니다.
- 도달 가능성 분석(Reachability Analysis): 대부분의 현대적인 가비지 콜렉션 알고리즘은 도달 가능성 분석을 기반으로 동작합니다. 이 방식에서는 루트(root) 객체(전역 객체, 스택 프레임 내의 로컬 변수 등)에서 시작하여 어떤 객체가 도달 가능한지를 분석하고, 도달할 수 없는 객체들을 가비지로 표시하고 해제합니다. 이 방식은 순환 참조를 처리하는 데 우수하며, 메모리 누수를 방지합니다.
- 세대별 가비지 콜렉션(Generational Garbage Collection): 세대별 가비지 콜렉션은 객체를 세대로 나누고, 새로 생성된 객체는 첫 번째 세대에, 오랜 기간 사용되는 객체는 두 번째 세대에 할당합니다. 대부분의 객체는 짧은 수명을 가지므로 첫 번째 세대에서 더 자주 가비지 콜렉션을 수행하고, 두 번째 세대는 상대적으로 덜 자주 가비지 콜렉션을 수행합니다. 이 방식은 전반적인 성능을 향상시키는 데 도움이 됩니다.
가비지 콜렉터는 프로그래머가 메모리 관리에 신경을 덜 쓸 수 있도록 도와주며, 메모리 누수와 관련된 버그를 줄여줍니다. 하지만 잘못된 사용이나 대규모 객체 그래프에서는 성능 이슈가 발생할 수 있으므로 프로그래머는 메모리 관리에 대한 이해와 최적화 기법을 알아두는 것이 중요합니다.
728x90
반응형
LIST