가비지 컬렉터(Garbage Collector)는 프로그래밍 언어 런타임 환경에서 메모리 관리를 지원하는 구성요소 중 하나입니다. 주로 메모리 누수를 방지하고 프로그램의 성능을 향상시키는 데 사용됩니다. 가비지 컬렉션은 프로그램이 동적으로 할당한 메모리를 관리하고 더 이상 사용되지 않는 메모리를 해제하여 다시 사용 가능한 상태로 만듭니다.
가비지 컬럭터는 다음과 같은 주요 작업을 수행합니다.
- 참조계산: 가비지 컬렉션은 프로그램에서 어떤 객체가 여전히 참조되고 있는지를 추적합니다. 객체가 더 이상 참조되지 않는 경우, 이 객체는 후속 작업을 위해 표시됩니다.
- 가비지 식별: 가비지 컬렉션은 더이상 참조되지 않는 객체를 확인합니다. 이러한 객체는 가비지로 표시됩니다.
- 메모리 해제: 가비지로 표시된 객체들을 메모리에서 제거합니다. 이로 인해 메모리 누수를 방지하고 시스템 메모리를 최적화할 수 있습니다.
가비지 컬렉션은 다양한 알고리즘을 사용하여 가비지를 식별하고 해제하는 방법에 따라 다양한 유형이 있습니다. 몇가지 흔한 가비지 컬렉션 알고리즘에는 다음과 같은 것들이 있습니다.
- 참조 카운팅(Reference Counting): 객체가 참조될 때마다 참조 횟수를 증가시키고, 참조가 삭제될 때 감소시켜서 참조 횟수가 0이 되면 객체를 해제함.
- 마크-스위프(Mark-Sweep): 동작 단계를 마킹(mark)단계와 스위핑(sweep)단계로 나누어 사용하지 않는 객체를 마킹하고, 스위핑 과정에서 마킹되지 않은 객체를 삭제함.
- 세대(Generational Garbage Collection): 객체를 세대로 나누어 젊은(young) 객체와 오래된(old) 객체를 구분하고, 젋은 객체의 가비지 컬렉션을 더 자주 수행하여 성능을 향상시킴.
- 복사 수집(Copying Garbage Collection): 메모리 공간을 두 영역으로 나누고, 한 영역에 객체를 복사하고 가비지 컬렉션시 다른 영역으로 옮기는 방식
가비지 컬렉션은 프로그래머가 명식으로 메모리를 할당하고 해제하는 번거로운 작업을 피할 수 있도록 도와주며, 메모리 관리 오류로 인한 버그를 줄이는데 도움을 줍니다. 하지만 가비지 컬렉션은 메모리 관리 오버헤드를 동반할 수 있으며, 일부 상황에서는 성능 이슈를 유발할 수도 있으므로 애플리케이션의 요구 사항에 맞는 적절한 가비지 컬렉션 알고리즘을 선택하는 것이 중요합니다.
'CS' 카테고리의 다른 글
| 제네릭이란 (0) | 2023.11.16 |
|---|---|
| 배열과 List, ArrayList, Dictionary 의 차이점 (0) | 2023.11.07 |
| 박싱과 언박싱이란 (0) | 2023.11.07 |
| 가비지 컬렉션이란 무엇인가 (0) | 2023.11.07 |
| 가비지 컬렉터를 회피하기 위한 전략 (0) | 2023.10.30 |