Skip to content

Latest commit

 

History

History
 
 

item08

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

finalizer와 cleaner사용을 피하라


요약

cleaner는 안전망 역할이나 중요하지 않은 네이티브 자원회수용으로만 사용하자. 물론 이런 경우라도 불확실성과 성능저하에 주의해야한다.

  • finalizer, cleaner 모두 언제 실행될지 그리고 실행이 보장되는지 여부를 알 수 없다.
    • File I/O나 DB의 lock을 회수해가는 로직을 여기에 집어넣으면 큰 문제가 발생할 수 있다.
  • 둘 다 쓰지말고, AutoCloseable 인터페이스를 구현해주면 된다.
    • close 메소드를 구현하고, 마지막에 이거 호출하면 된다.

주의

  • 실행을 예측할 수 없고, 느리고, 일반적으로 불필요하다.
  • 내부 중첩 클래스에서는 바깥 객체의 인스턴스를 절대 참조하면 안된다. 순환참조가 생길 수 있어서 GC가 안될 수 있다!

몰랐던 것들

  • 네이티브 메소드란?
    네이티브 메소드는 자바가 아닌 다른 언어로 구현된 메소드입니다.
    네이티브 메소드의 앞에는 native 키워드가 붙어있습니다.
    그 예로 현제 스레드를 가져오는 Thread.currentThread() 메소드가 있습니다.