gpffh1011
가비지 콜렉터(GC) 본문
가비지(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'객체를 가비지로 간주한다.
'자바 > 관련상식' 카테고리의 다른 글
[자바 의존성] 프레임워크와 자바 웹개발 관련 프레임워크 (0) | 2020.05.14 |
---|---|
절차지향 언어와 객체 지향 언어의 차이는? (0) | 2020.05.14 |
디자인패턴, 스트래티지 패턴 (0) | 2020.05.14 |
[자바의 의존성] 메이븐과 의존성 관리도구 (0) | 2020.05.14 |
[자바의 의존성] 의존성과 라이브러리, 그리고 jar (0) | 2020.05.14 |