객체 소멸자 finalize()
참조하지 않는 배열이나 객체는 Garbage Collector 가 힙 영역에서 자동적으로 소멸시킵니다.
Garbage Collector는 객체를 소멸하기 직전에 마지막으로 객체 소멸자 finalize()를 실행 시킵니다.
소멸자 : Object의 finalize() 메서드.
기본적으로 실행 내용이 없습니다.
객체가 소멸되기 전에 마지막으로 사용했던 자원(데이터 연결, 파일 등)을
닫고 싶거나 중여한 데이터를 저장하고 싶다면 Object의 finalize()를 재정의할 수 있습니다.
예제)
public class Counters {
private int no;
public Counters(int no) {
this.no = no;
}
@Override
protected void finalize() throws Throwable { // finalize()를 오버라이딩
System.out.println(no + "번 객체의 finalize()가 실행됨");
}
}
실행 클래스
public class FinalizeExample {
public static void main(String[] args) {
Counters counter = null;
for(int i=1; i<=50; i++) {
counter = new Counters(i);
counter = null; // counter 객체를 쓰레기로 만듭니다.
System.gc(); // Garbage Collector 실행을 요청합니다.
}
}
}
무작위로 소멸되는 것을 볼 수 있을 것입니다.
전부 소멸되는 것이 아니라 메모리의 상태를 보고 일부만 소멸시킵니다.
예제에서는 System.gc()로 Garbage Collector를 실행 요청했지만,
Garbage Collector는 메모리가 부족할때 , CPU가 한가할 때에 JVM에 의해 자동적으로 실행.
finalize() 메서드가 호출된 시점은 정확하지 않습니다.프로그램이 종료될 때 즉시 자원을 해제하거나
데이터를 최종 저장해야 한다면 프로그램이 종료될 때 명시적으로 메서드를 호출하는 것이 좋습니다.
'자바' 카테고리의 다른 글
JAVA 자바 Objects 클래스 해시 코드 생성 hash() , hashCode() ///널 여부 검사 isNull(), nonNull(), requireNonNull() (0) | 2017.03.14 |
---|---|
JAVA 자바 Objects 클래스 객체 비교 compare(T t1, T t2, Comparator<T> c) /// 동등비교 equals() 와 deepEquals() (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체 복제 clone (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체의 문자 정보 toString() (0) | 2017.03.14 |
JAVA 자바 Object 클래스 객체 해시코드 hashCode() (0) | 2017.03.14 |