博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java将弃用finalize()方法?
阅读量:6029 次
发布时间:2019-06-20

本文共 792 字,大约阅读时间需要 2 分钟。

最近,OpenJDK邮件组core-libs-dev里出现了一封,建议弃用Object类的finalize()方法。

\\

弃用Object类的方法将会是一件非常不寻常的事情。Java从 1.0开始就有了finalize()方法,不过这个方法一直被认为是一个糟糕的设计,也是Java平台的一个遗留的大“毒瘤”。

\\

垃圾回收器会特别对待覆盖了finalize()方法的对象。一般情况下,在垃圾回收期间,一个无法触及的对象会立即被销毁。不过,覆盖了finalize()方法的对象会被移动到一个队列里,一个独立的线程遍历这个队列,调用每一个对象的finalize()方法。在finalize()方法调用结束之后,这些对象才成为真正的垃圾,等待下一轮垃圾回收。

\\

Java的这种机制与C++里的RAll模式类似,创建对象的时候分配资源(比如文件句柄),在销毁对象时自动释放资源。

\\

不过,析构并不能安全地实现资源的自动管理,因为垃圾回收器并没有运行时间上的保证。也就是说,并不存在任何一种机制可以把资源的释放与对象的生命周期完全绑定在一起,如果处理不好还会耗尽资源。

\\

析构的使用已经偏离了它的设计初衷。

\\

多年来,Oracle(以及之前的Sun)建议开发者避免在一般的应用里使用析构。弃用析构意味着向彻底移除迈出了第一步,不过现在能做的也就是在使用析构时给出编译警告。

\\

现在并没有任何有关彻底移除析构机制的时间表,部分原因是因为Java平台上仍然存在一些使用析构的场景,这些场景与资源使用的管理并没有联系。已经有人在考虑如何对这些场景进行迁移,以便移除对析构机制的依赖。

\\

如果Java 9不会弃用析构(看起来不太可能),那么最早有可能会在Java 10里弃用。不过,最终是不是会在Java 10里弃用,或者在更晚的版本里,目前尚无定论。

\\

查看英文原文:

转载地址:http://ifkhx.baihongyu.com/

你可能感兴趣的文章
制作ubuntu系统u盘镜像,以及安装
查看>>
JAVA多线程深度解析
查看>>
Kafka High Level Consumer 会丢失消息
查看>>
时间轴
查看>>
java 获取系统当前时间的方法
查看>>
Ubuntu 10.04升级git 到1.7.2或更高的可行方法
查看>>
Spring Security4实战与原理分析视频课程( 扩展+自定义)
查看>>
消息队列服务器 memcacheq的搭建
查看>>
VMware Horizon View 7.5 虚拟桌面实施咨询与购买--软件硬件解决方案
查看>>
RabbitMQ如何保证队列里的消息99.99%被消费?
查看>>
第一周博客作业
查看>>
thinkpython2
查看>>
String、StringBuffer和StringBuilder的区别
查看>>
oracle recyclebin与flashback drop
查看>>
svmlight使用说明
查看>>
Swing 和AWT之间的关系
查看>>
Mysql设置自增长主键的初始值
查看>>
Android计时器正确应用方式解析
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>