[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 |