가비지 컬렉션

내위키
Dennis (토론 | 기여)님의 2020년 2월 18일 (화) 02:49 판 (새 문서: Garbage collection. 말 그대로 해석해 보면 '쓰레기 모으기'라는 뜻이다. 프로그래밍 언어에서 쓰이는 개념으로, 메모리에서 사용하지 않는 '...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

Garbage collection.

말 그대로 해석해 보면 '쓰레기 모으기'라는 뜻이다. 프로그래밍 언어에서 쓰이는 개념으로, 메모리에서 사용하지 않는 '쓰레기'를 모아서 폐기하는 것을 뜻한다. 이러한 일을 수행하는 프로그램을 가비지 컬렉터(garbage collector)라고 부른다.

이러한 쓰레기의 대표적인 사례는 동적으로 배당 받은 메모리가 있다. CC++은 동적으로 받은 메모리를 다 사용하고 나면 반드시 반납해야 하며, 반납하지 않은 메모리는 계속 프로그램이 잡고 있기 때문에 메모리 누수를 일으키는 원인이다. 이는 심각한 버그를 단골로 일으키는 원인이기도 하다. 가비지 컬렉션을 지원하는 언어에서는 코드에서 직접 반납하지 않은 메모리라고 해도 더 이상 사용하지 않는다고 판단하면 수집해서 시스템에 반납한다. 예를 들어 어떤 함수 안에서 동적으로 메모리를 배당 받았는데, 이 함수 안에서 반납하지도 않고, 함수의 반환값으로 내보내지도 않은 메모리가 있다면 이는 분명히 '쓰레기'다. 자바C샵을 비롯해서 가비지 컬렉션을 지원하는 언어에서는 알고리즘으로 볼 때 명백하게 쓰레기로 판단할 수 있는 메모리들을 수집한다.

가비지 컬렉션은 프로그래머가 메모리 배당과 반납에 신경쓰지 않아도 되므로 편리하고 버그도 적지만 성능으로 보면 약점이 있다. 가비지 컬렉터는 뒷단에서 계속 메모리 배당을 감시하고 배당 받은 메모리를 관리하고 있다. 일정한 주기로 쓰레기를 수집해서 폐기하는 일을 한다. 따라서 가비지 컬렉터가 돌아가는만큼 컴퓨터의 성능을 소비하며, 쓰레기를 수집하고 폐기하는 주기에 처리해야 할 쓰레기가 많다면 이를 처리하는 과정에서 프로그램의 실행이 눈에 띄게 느려지거나 잠시 멈추는 경우도 있다.