결론! 위 두개를 사용해서 객체 사용이 끝나는 시점에 소멸시켜야지! 라고 사용하지 말자.
GC의 대상은 되지만 바로 수거해가는게 아니다.
finalize 메서드
finalizer
와 cleaner
는 즉시 수행된다는 보장이 없다. 언제 실행될 지 알 수 없으며 시간이 얼마나 걸릴지는 아무도 모른다. 즉 원하는 시점에 실행하게 하는 작업은 절대 할 수 없다.
얼마나 신속히 수행될지는 가비지 컬렉터에게 기도해야 한다. 🙏
전적으로 가비지 컬렉터 알고리즘에 달려있으며 가바지 컬렉터마다 다르다.
현재 프로그래머가 테스트한 JVM에선 완벽하게 동작하여도 고객의 시스템에선 재앙을 일으킬 수 있다.