* finalize 는 어떤 클래스든 오버라이드 하여 사용 가능한 기능이다.
public class FiinalIzerExample {
@Override
protected void finalize() throws Throwable {
super.finalize();
}
}
왜 문제가 생기는지?
하지만 종료자(finalizer)는 예측 불가능 하며, 대체로 위험하고, 일반적으로 불필요하다.
종료자는 GC 에 의해 실행되는데 GC에서 종료자 스레드가 종료 우선순위가 높지 않다면 혹은 다른 이유로 즉시 실행 되리라는 보장이 전혀 없기 때문이다. 또한 종료자를 사용하면 프로그램 성능이 심각하게 떨어진다.
* 현재 자바9 에서는 finalizer 가 deprecated가 되었다고 한다. 'Cleaner' 라는게 새로 생겨서 Finalizer 보다 덜 위험하지만별도의 쓰레드를 사용하니까), 여전히 예측 불가능 하며, 일반적으로 불필요 하다고 말한다. (백기선 강의)
어떤 문제가 생기는지?
github.com/keesun/study/blob/master/effective-java/item8.md
keesun/study
Learn, Share and Grow. Contribute to keesun/study development by creating an account on GitHub.
github.com
#. 긴급한(Time-Creitical) 작업을 종료자 안에서 처리 할 경우.
에를 들어, 종료자 안에서 파일을 닫도록 할 경우 치명적이다. 파일(file descriptor) 은 유한한 자원이기 때문이다. JVM 은 종료자를 천천히 실행 하므로 열린 상태의 파일이 많이 남아있을 수 있다. 그런 상황에서 새로운 파일을 열려 하면, 한번에 열수 있는 파일의 개수에 제한이 있으므로 오류가 나게된다.
stackoverflow.com/questions/2936155/java-file-write-on-finalize-method
Java: file write on finalize method
In my understanding a singleton object will destroy only when the application is about to terminate. So in C++ I write a Singleton class to log my application and in that Singleton logger's destruc...
stackoverflow.com
#. finaizer 공격이라는 심각한 보안이슈.
다른 클래스는 finalize() 메소드에 'final' 키워드를 사용해서 상속해서 오버라이딩 하는것을 막을수 있다.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=508390&ref=508371
blog.naver.com/hhhhhongse/221798617689
어떻게 대체 하는지?
# 자원반납은 AutoCloseable 과 Try-With-Resource 를 사용한다.
Eternity's Chit-Chat : Resource Release Patterns
시스템 리소스의 사용이 완료된 후 해제 되었음을 보장하기 위해서는 어떻게 해야 하는가? 시스템의 자원은 유한하다. 동시에 열 수 있는 파일의 수, 스레드의 최대 수, 데이터베이스 컨넥션 풀
aeternum.egloos.com
그래도 어떤 경우에 사용될수 있는지?
1) 안전망 역할로 자원을 반납하고자 하는경우
2) 네이티브 리소스를 정리 해야하는경우
'java' 카테고리의 다른 글
[자바 병렬 처리 - 포크/ 조인 프레임 워크] (0) | 2021.04.17 |
---|---|
[JAVA]스트림(Stream) 에서 기본형(Primitive type)은 왜 취약할까? (0) | 2021.04.13 |
[JAVA 개념] 추상클래스와 인터페이스의 차이점 ( + 상속과 구현) (0) | 2021.04.11 |
[Effective Java] Item 6 - 유효기간이 지난 객체 참조는 폐기하라. (0) | 2021.01.30 |
[디자인패턴] 빌더(Builder) - 개념 정리,예제 (0) | 2021.01.28 |