Skip to content

Commit cc52861

Browse files
authored
Update 08.finalizer와 cleaner 사용을 피하라. (그냥 쓰지마라).md
1 parent 2f434af commit cc52861

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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

0 commit comments

Comments
 (0)