finalize 메소드의 오버라이딩을 자제해야 하는 이유.



모든 자바 클래스의 최상위 부모클래스인 java.lang.Object 클래스에는 finalize() 메소드가 존재하며,
Java API 에는 이 메소드는  '가비지 컬렉터가 레퍼런스를 잃은 클래스의 인스턴스를 가비지 컬렉션할 때 호출된다'
라고 기술하고 있습니다.

이 메소드는 객체인스턴스가 가비지 콜렉션에 의해 소멸되는 시점에 특정한 동작을 수행해야 할때도 요긴하게
사용할 수 있는 메소드입니다만 일반적인 경우 불필요하게 이 finalize() 메소드를 오버라이딩하는 것은 자제해야합니다.

이유는 'finalize 메소드에 의한 Collection 지연과 OOME(Out of Memory Exception)발생 가능성'
때문입니다.
특정 Class에 finalize 메소드가 정의되어 있는 경우, 이 Class Type의 Object는 Garbage Collection 발생시
즉각적으로 Collection 되지 않습니다. 대신 Finalization Queue에 들어간 후 Finalizer에 의해 정리가 되는데요.
Finalizer는 Object의 finalize 메소드를 실행한 후 메모리 정리 작업을 수행하게됩니다.
만일 finalize 메소드를 수행하는데 오랜 시간이 걸린다면 그 만큼 객체가 오랫동안 메모리를 점유하게 되고
이로 인해 OOME가 발생할 확률이 높아집니다.
이런 이유로 finalize 메소드는 되도록 사용하지 말아야 합니다.

이 글의 관련글
  • JAVA 5 한글 api
  • QUEUE와 DELAYED 프로세싱
  • JDOM과 XML 파싱
  • String 타입의 날짜를 Date 타입으로 변환하기
  • KEYPAIRGENERATOR를 이용해서 비대칭 암호 키 구하기
  • BigDecimal의 필요성
  • double 값을 문자열 형식의 퍼센트값으로 변환하기
  • 자바 파일복사 코드와 성능 2 :: Java File Copy Code & Perfomance Issue. part 2 (7)
  • Java Profiler JProbe 8.0 출시!! :: 자바 프로파일러
  • JAVA.UTIL.SCANNER로 텍스트 스캔하기
  • SCJP 5.0 인증 시험 시뮬레이터
  • 자바는 call by value? call by reference? (1)
  • 2008/11/06 11:08 2008/11/06 11:08
    Trackback Address:http://www.yunsobi.com/blog/trackback/429
    [로그인][오픈아이디란?]