객체의 소멸과 가비지 컬렉션
객체의 소멸
자바에는 객체를 생성하는 new 연산자는 있지마 객체를 소멸시키는 연산자는 없으므로 자바에서는 개발자가 마음대로 객체를 소멸시킬 수도 없습니다.
객체 소멸이란 new에 의해 생성된 객체 공간을 자바 가상 기계에게 돌러주어 가용 메모리(available memory)에 포함시키는 것입니다.
자바에서는 Object 클래스의 finalize()가 소멸자와 유사한 기능입니다.
자바에서 new로 할당받은 후 사용하지 않게 된 객체 메모리는 가바지(garbage)라고 부르며, 자바 가상 기계의 가비지 컬렉터(garbage collector)가 적절한 시점에 자동으로 수집하여 가용 메모리에 반환시킵니다.
가비지
자바 응용 프로그램에서 더 이상 사용되지 않게 된 객체나 배열 메모리입니다.
참조하는 레퍼런스가 하나도 없는 객체나 배열을 가비지로 판단합니다. 왜냐하면 이 객체는 응용 프로그램이 더 이상 접근할 수 없기 때문입니다.
a = new Person("이몽룡");
b = new Person("성춘향");
그리고 나서 다음 라인을 실행해보면
b = a;
레퍼런스 b는 a가 가리키던 객체를 가리키게 되고, b가 가리키던 처음 객체는 아무것도 참고하지 않게 되어 더 이상 접근할 수 없게 되었습니다. 이 객체가 바로 가비지입니다.

가비지의 발생
public class GarbageEx {
public static void main(String[] args) {
String a = new String("Good");
String b = new String("Bad");
String c = new String("Normal");
String d, e;
a = null;
d = c;
c = null;
}
}

가비지 컬렉션(garbage collection)
가비지는 더 이상 참조되지 않기 때문에 가비지가 처리하기 있는 메모리 공간은 회수되어야 합니다.
가비지가 많아지면 자바 플랫폼이 응용 프로그램에게 할당해 줄 수 있는 가용 메모리 양이 줄어들게 됩니다.
시간이 지날수록 자연히 가비지가 늘어나게 되며, 최악의 경우 자바 플랫폼의 가용 메모리가 0이 되면 자바 응용 프로그램은 더 이상 실행할 수 없게 됩니다.
이런 경우를 대비하여 자바 플랫폼은 가용 메모리가 일정 크기 이해로 줄어들면 자동으로 가비지를 회수하여 가용 메모리를 늘립니다. 이것을 가비지 컬렉션이라고 부르며, 가비지 컬렉션은 자바 플랫폼에 의해 준비된 가비지 컬렉션 스레드(garbage collection thread)에 의해 처리됩니다.
가비지 컬렉션 강제 요청
응용 프로그램에서 System 또는 Runtime 객체의 gc() 메소드를 호출하면 가비지 컬랙션을 요청할 수 있습니다.
System.gc(); // 가비지 칼렉션 강제 요청
그러나 이 문장을 호출한 즉시 가비지 컬렉터가 작동하는 것은 아닙니다. 이 문장은 가비지 컬렉션이 필요하다는 요청에 불과합니다.
가비지 컬렉션은 자바 플랫폼이 전적으로 판단하여 적절한 시점에 작동시킵니다.