가비지 컬렉션(Garbage Collection, GC)
메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다.
즉, 동적 할당된 메모리 영역 가운데 어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해제하는 기법이다.
장점
GC를 이용하게 되면 프로그래머가 동적으로 할당한 메모리 영역 전체를 완벽하게 관리하지 않아도 된다.
즉, GC를 통해 아래와 같은 버그를 줄이거나 막을 수 있다.
유효하지 않은 포인터 접근 : 이미 동적 할당한 메모리를 해제한 영역에 접근하게 되는 버그
이중 해제 : 이미 해제된 메모리를 또 다시 해제하는 오류를 줄일 수 있다. 대표적으로 C에서는 free()를 통해 해제하고
또 다시 free()를 하면 정상 종료 되지 않는다.
메모리 누(Memory Leak) : 더이상 사용하지 않는 메모리 영역을 해제하지 않고 남겨진 것이 쌓이게 되면 메모리 누수가
일어난다는 것이다. 이러한 메모리 누수가 지속되면 메모리 고갈로 인해 프로그램이 중단 될 수 있다.
단점
어떤 메모리를 해제해야 할 지 결정하는데 사용되는 알고리즘에 의해 비용이 든다.
객체가 필요없어지는 시점을 프로그래머가 알고 있는 경우에도 GC 알고리즘이 메모리 해제 시점을 추적해야하기에
비용이 들게된다.
GC가 행동하는 타이밍이나 GC의 점유 시간을 사전에 예측하기 어렵기에 실시간 시스템에는 적합하지 않다.
할당된 메모리가 해제되는 시점을 알 수 없게 된다.
가비지 컬렉션의 위험성
실시간 시스템에서 Garbage Collection이 사용된다면 치명적인 오류를 발생할 수 있다.
군사목적의 프로그래밍(미사일 발사 등) 혹은 비행시스템 등에서 실시간으로 목표물 지점으로 날아가고 있는 중간에
Garbage Collection이 발생하여동작하게 되면 잠시 동안 앞에서 말한 알고리즘의 동작이 멈출 수 있는 가능성 때문에
실시간 시스템에서는 Garbage Collection은 지양해야 한다.