cleaner는 안전망 역할이나 중요하지 않은 네이티브 자원회수용으로만 사용하자. 물론 이런 경우라도 불확실성과 성능저하에 주의해야한다.
- finalizer, cleaner 모두 언제 실행될지 그리고 실행이 보장되는지 여부를 알 수 없다.
- File I/O나 DB의 lock을 회수해가는 로직을 여기에 집어넣으면 큰 문제가 발생할 수 있다.
- 둘 다 쓰지말고, AutoCloseable 인터페이스를 구현해주면 된다.
- close 메소드를 구현하고, 마지막에 이거 호출하면 된다.
- 실행을 예측할 수 없고, 느리고, 일반적으로 불필요하다.
- 내부 중첩 클래스에서는 바깥 객체의 인스턴스를 절대 참조하면 안된다. 순환참조가 생길 수 있어서 GC가 안될 수 있다!
- 네이티브 메소드란?
네이티브 메소드는 자바가 아닌 다른 언어로 구현된 메소드입니다.
네이티브 메소드의 앞에는 native 키워드가 붙어있습니다.
그 예로 현제 스레드를 가져오는 Thread.currentThread() 메소드가 있습니다.