가비지 컬렉션(Garbage Collection) 알고리즘
가비지 컬렉션은 메모리 관리를 위해 사용되는 중요한 프로세스입니다. 자바스크립트에서는 가비지 컬렉션을 통해 사용되지 않는 메모리를 자동으로 해제하여 메모리 누수를 방지합니다. 이 챕터에서는 가비지 컬렉션의 개념과 주요 알고리즘에 대해 알아보겠습니다.
1. 가비지 컬렉션(Garbage Collection)이란?
가비지 컬렉션은 프로그램이 동적으로 할당한 메모리 영역 중에서 사용되지 않는 메모리를 식별하고 해제하는 프로세스입니다. 이를 통해 메모리 누수를 방지하고 시스템의 성능을 향상시킵니다.
2. 주요 가비지 컬렉션 알고리즘
2.1. 참조 카운팅(Reference Counting)
참조 카운팅은 객체가 참조되는 횟수를 카운팅하여 해당 객체의 메모리를 해제하는 방식입니다. 객체의 참조가 증가하거나 감소할 때마다 카운트를 증가하거나 감소시킵니다. 그러나 순환 참조에 대한 처리가 어려우며, 성능 저하를 가져올 수 있습니다.
2.2. 표시-정리(Mark-Sweep)
표시-정리 알고리즘은 루트부터 시작하여 도달 가능한 모든 객체를 표시한 다음, 표시되지 않은 객체를 해제하는 방식입니다. 이 알고리즘은 순환 참조 문제를 해결할 수 있지만, 메모리 단편화 문제가 발생할 수 있습니다.
2.3. 세대별 가비지 컬렉션(Generational Garbage Collection)
세대별 가비지 컬렉션은 객체를 여러 세대로 분류하여 각 세대에 대해 다른 가비지 컬렉션 알고리즘을 적용하는 방식입니다. 새로운 객체는 '새로운 세대'에 할당되고, 일정 시간 이상 살아남은 객체는 '오래된 세대'로 이동합니다. 이를 통해 젊은 세대의 객체는 빈번하게 해제되고, 오래된 세대의 객체는 더 오랫동안 유지됩니다.
3. 예시 코드
// 예시 코드: 순환 참조를 해결하는 방법
let obj1 = {};
let obj2 = {};
obj1.ref = obj2; // obj1이 obj2를 참조
obj2.ref = obj1; // obj2가 obj1을 참조
// 순환 참조를 해제하기 위해 참조를 null로 설정
obj1 = null;
obj2 = null;
위 코드에서 obj1과 obj2가 서로를 참조하고 있습니다. 이런 경우, 가비지 컬렉션은 이러한 순환 참조를 감지하고 메모리를 해제합니다. 최종적으로 obj1과 obj2가 null로 설정되면 순환 참조가 해제되어 메모리가 정리됩니다.
가비지 컬렉션은 자바스크립트의 메모리 관리를 효율적으로 지원하여 개발자가 메모리 누수를 신경 쓰지 않고 안정적인 애플리케이션을 개발할 수 있도록 도와줍니다.
'javascript pure > javascript 코어 개념' 카테고리의 다른 글
20. 디자인 패턴(Design Patterns) - 2 (0) | 2024.02.16 |
---|---|
19. 디자인 패턴(Design Patterns) - 1 (0) | 2024.02.16 |
18. 메모리 관리(Memory Management) - 3 (0) | 2024.02.16 |
17. 메모리 관리(Memory Management) - 2 (0) | 2024.02.16 |
15. 실행 컨텍스트(Execution Context)와 스코프(Scope) - 3 (0) | 2024.02.16 |
14. 실행 컨텍스트(Execution Context)와 스코프(Scope) - 2 (0) | 2024.02.16 |
13. 실행 컨텍스트(Execution Context)와 스코프(Scope) - 1 (0) | 2024.02.16 |
12. 이벤트 루프(Event Loop) - 3 (0) | 2024.02.16 |