IT 관련 책 정리 및 후기/Java Effective E3
[Item 8] finalizer와 cleaner 사용을 피하라
JUN0126
2022. 5. 19. 01:48
자바 제공 객체 소멸자
1. finailzer
2. cleaner
위 두개의 객체 소멸자 사용 시 인스턴스의 자원 회수가 제멋대로 지연될 수 있다.
상태를 영구적으로 수정하는 작업에서는 절대 finalizer나 cleaner에 의존해서는 안된다.
객체 소멸자 대체 방법
- AutoCloseable 구현 해주고, 클라이언트에서 인스턴스를 다 쓰고 나면 close 메서드를 호출
- 일반적으로 예외가 발생해도 제대로 종료되도록 try-with-resources 사용
finailzer과 cleaner 활용 방법
1. 소유자가 close 메서드를 호출하지 않는 것에 대비한 안전망 역할
- 두 객체 소멸자가 호출 된다는 보장은 없지만, 클라이언트가 하지 않은 자원 회수를 늦게라도 해주는 안정망 역할
2. 네이티브 피어와 연결된 객체
- 네이티브 피어란 일반 자바 객체가 네이티브 메서드를 통해 기능을 위임한 네이티브 객체다.
- 네이티브 피어는 자바 객체가 아니므로 가비지 컬렉터는 그 존재를 알지 못하고 자바 피어를 회수 할때 네이티브
피어는 회수하지 못한다. 이때 두 객체 소멸자가 나서서 처리 할 수 있다.
- 성능 저하를 감당할 수 없거나 네이티브 피어가 사용하는 자원을 즉시 회수해야 한다면 close 메서드를 사용하라
참조된 ITEM
- try-with-resources [Item 9]
- 정적이 아닌 중첩 클래스 참조 [Item 24]