[Basic C++] #59_가비지 컬렉션
C++의 "가비지 컬렉션"에 대해 알아보겠습니다.
"전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다.
개념
가비지 컬렉션은 자동 메모리 관리 기법 중 하나로, 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 식별하고 해제하는 프로세스입니다. 가비지 컬렉션은 자동 메모리 관리를 통해 댕글링 포인터 발생을 방지하고, 편의성을 제공하지만, 런 타임 오버헤드를 유발합니다.
마크 앤 스윕 알고리즘
마크 앤 스윕 알고리즘은 가비지 컬렉션의 접근 방법 중 하나로 주기적으로 모든 포인터에 대해 해당 메모리를 참조하여 사용하는 부분이 있는지 검사하여 표시(마크)합니다. 각 검사 주기가 끝날 때마다 표시되지 않은 메모리를 "미사용"으로 취급하여 해제합니다. 마크 앤 스윕 알고리즘 사용을 위해 필요한 사항이 존재합니다!
1. 모든 포인터를 가비지 컬렉터에 등록하여 가비지 컬렉터가 순회하며 검사할 수 있도록 합니다.
2. 모든 객체를 "GarbageCollectible"을 상속하도록 합니다.
3. 가비지 컬렉터가 포인터들을 검사하는 동안, 병렬적으로(멀티쓰레딩) 해당 포인터에 접근하지 못하도록 합니다.
설명만 보면 별다른 큰 문제없이 편리하게 사용할 수 있는 툴로 보이지만, 단점들이 분명히 존재합니다!
1. 가비지 컬렉션을 수행중일 때 응답률이 떨어집니다.
2. 가비지 컬렉션 사용은 "비결정적인" 소멸자를 이용하며, 정확한 시점에 호출된다는 보장이 없습니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #61_객체 풀, Obejct Pooling (0) | 2022.10.07 |
---|---|
[Basic C++] #60_스마트 포인터 (0) | 2022.09.28 |
[Basic C++] #58_포인터, 배열과 포인터, 포인터 연산, 함수 포인터, 클래스 메서드 포인터 (0) | 2022.09.22 |
[Basic C++] #57_동적 메모리 (1) | 2022.09.20 |
[Basic C++] #56_cctype, 대문자+소문자 확인 (0) | 2022.09.15 |