1. 首页
  2. 编程语言
  3. Java
  4. Java 为什么要避免使用finalizer和Cleaner

Java 为什么要避免使用finalizer和Cleaner

上传者: 2021-06-07 10:20:12上传 PDF文件 134.95 KB 热度 14次

java9之前finalizer,java9使用cleaner代替了finalizer。相比finalizer,cleaner不会污染API而且cleaner有类库可以控制它的线程。避免使用的原因:行为的不稳定性它两都不能保证及时的执行,从方法可达到开始到最终的执行,时间是任意长的。所以千万不要使用他们来更新重要的持久状态,如释放流资源、分布式锁等。System.gc和System.runFinalization这两个方法会增加finalizer和cleaner被执行的机会,但是不保证一定会执行。唯一能保证它两会被执行的两个方法有致命的缺陷,已经被废除很久了。移植性问题不同的JVM堆垃圾回收的算法不同,如果程序依赖finalizer或者cleaner被执行的时间点,那么程序的表现可能截然不同性能问题finalizer和cleaner有一个非常严重的性能损耗。

下载地址
用户评论