gpffh1011

가비지 콜렉터(GC) 본문

자바/관련상식

가비지 콜렉터(GC)

gpffh1011 2020. 5. 3. 00:00

가비지(Garbage)란?

가비지는 '정리되지 않은 메모리', '유효하지 않은 메모리 주소'를 말한다.

아래 코드로 가비지의 예를 들어보았다.

String[] array = new String[2];

array[0] = '0';

array[1] = '1';

array = new String[] {'G', 'C' };

위 코드에서 G와 C가 할당되기 전에 할당한 0과 1은 어디로 갔을까? 이렇게 주소를 잃어버려서 사용할 수 없는 메모리가 바로 '정리되지 않은 메모리=가비지'이다. 프로그래밍 언어에서는 Danling Object, 자바에서는 Garbage라고 부른다.

추가로 앞으로 사용하지 않고 연결된 리모콘이 없으며, 메모리를 가지고 있는 객체 역시 Garbage에 포함된다.

 

 

 

가비지 콜렉터(Garbage Collector)란?

가비지콜렉터는 메모리가 부족할 때 이런 가비지들을 메모리에서 해제 시켜 다른 용도로 사용 할 수 있게 해주는 프로그램을 말한다.

C++와 같은 다른 언어에서는 사용하지 않을 객체의 메모리를 직접 해제해주어야 하지만 자바는 GC가 잡아주니 개발자 입장에서는 편리하다. 다만 모든 메모리 누수를 잡아주는 것은 아님으로 메모리 누수에 대한 경계를 늦추어서는 안된다.

 

 

 

GC 과정

GC의 과정을 Mark and Sweep이라고도 한다. GC가 스택의 모든 변수 또는 Reachable 객체를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾는 과정이 Mark라고 한다. 이후 Mark 되어있지 않은 객체들을 힙에서 제거하는 과정이 Sweep이다.

 

 

 

Reachability

Java의 GC는 가비지 객체를 판별하기 위해 reachability라는 개념을 사용한다. 어떤 객체에 유효한 참조가 있으면 'reachable', 없으면 'unreachable'로 구별하고 'unreachable'객체를 가비지로 간주한다.