File tree 1 file changed +33
-0
lines changed
1 file changed +33
-0
lines changed Original file line number Diff line number Diff line change
1
+ # 08.finalizer와 cleaner ~~ 사용을 피하라~~ . (그냥 쓰지마라)
2
+
3
+ > 심지어 finalizer는 자바9부터 deprecated 되었다...그래도 일단 알아보자.
4
+
5
+ ** finalizer와 cleaner란?**
6
+ ➡️ 자바가 제공하는 두가지 객체 소멸자이다.
7
+
8
+ ## 왜 사용하면 안되는가?
9
+ 1 . 예측할 수 없다.
10
+ - 수행하는 스레드가 즉시 수행된다는 보장이 없다.
11
+ - 내가 원하는 타이밍에 작업을 절.대.로 수행할 수 없다.
12
+ 2 . 느리다.
13
+ - ` try-with-resource ` 로 GC가 객체를 수거하기까지 12ns 소요
14
+ - ` finalizer ` 는 550ns 소요
15
+ - ` cleaner ` 는 500ns 소요
16
+ 3 . 일반적으로 불필요하다.
17
+ - 우리에겐 GC와 ` AutoCloseable ` 이 있다!
18
+
19
+ ## 그럼 대체 어디에 사용되는가? 🤔
20
+ - 안전망 역할
21
+ > 즉시 호출된다는 보장이 없지만.. 언젠간 호출되니까...^^
22
+ - 정도의 생각을 갖고 사용해야 한다. 절대 객체의 소멸을 맡기면 안된다.
23
+ - 네이티브 피어와 연결된 객체에서 사용
24
+ - 네이티브 피어란, C/C++로 작성된 프로그램을 Java의 Native API를 통해 연관된 객체를 의미한다.
25
+ - 결국 네이티브 피어는 자바 객체가 아니기때문에 GC가 자원을 회수할 수 없다.
26
+ ➡️ 하지만 두가지 경우 모두 ** 성능 저하 감당** 을 할수 있고, ** 해당 자원이 중요하지 않을 때** 사용하자.
27
+
28
+ ## 결론
29
+ - 사용하지 말자.
30
+ - 네이티브 피어의 경우 성능 저하를 감당하겠다면, 도입을 고려해볼 수 있다.
31
+
32
+ ** 참고**
33
+ - finalize 코드로 이해해보기: https://www.baeldung.com/java-finalize
You can’t perform that action at this time.
0 commit comments