Table of Contents
Garbage Collection이란? #
Garage란 응용프로그램에서 더 이상 사용되지 않는 메모리를 말한다. 객체나 배열을 가리키는 레퍼런스가 하나도 없음을 의미한다. 이러한 Garage 영역을 자동적으로 해제하여 메모리 공간을 확보하는 기능을 Garbage Collection이라고 말한다. 한글 명칭인 가비지 컬렉션을 혼용한다.
class Insilicogen {
private String memberNm;
public MemberList(String memberNm) {
this.memberNm = memberNm
}
}
public class IncoPlay {
public static void main(String[] args) {
Insilicogen inco1 = new Insilicogen("JO");
Insilicogen inco2 = new Insilicogen("CHOI");
/* inco1 레퍼런스가 처음에 가리키던 객체는 어떤 레퍼런스 변수도 참조하지 않는 가비지가 된다. */
inco1 = inco2;
}
}
왜 Garbage Collector가 필요한가? #
가비지 컬렉터가 없다면 프로그래머가 사용하지 않는 메모리를 일일이 체크하고 반환하는 일을 수동적으로 처리해야 할 것이다. 자동으로 메모리를 관리할 수 있다는 점은 프로그래머가 보다 프로그래밍에 집중할 수 있도록 도와준다.
Garbage Collection 수행과정 #
1) 참조되지 않은 객체들을 탐색 후 삭제한다. 2) 삭제된 객체의 메모리를 반환한다. 3) Heap 메모리를 재사용한다.
주의사항 #
하지만 가비지 컬렉션은 JVM이 내부적인 알고리즘의 판단에 의해서 수행되기 때문에 언제 가비지 컬렉션이 일어나는지 알기가 어렵다. 아니 알 수가 없다. 따라서 할당된 메모리가 해제되는 타이밍이나 점유 시간을 예측하는 것이 불가능하기 때문에 예측 불가능하게 프로그램이 정지할 수 있다는 단점을 가진다.
TIP #
특정 시점에 가비지 컬렉션을 요청하는 방법은 있다.
System.gc();
/* 또는 */
Runtime.getRunTime().gc();
다만, 이것은 말 그대로 요청일 뿐, 위문장을 실행하자마자 가비지 컬렉터가 작동되는 것이 아니다. 단지 가비지 컬렉션이 필요하다고 JVM에 요청한 것에 불과하며 메모리 해제 여부 및 시점은 JVM이 판단한다.
참조 #
http://blog.naver.com/madplay?Redirect=Log&logNo=220875675406