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

本文共 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://fbsnl.baihongyu.com/

你可能感兴趣的文章
授权windows客户端用户连接Linux mysql命令
查看>>
打开excel向程序发送错误时出现错误
查看>>
03-Windows Server 2012 新特性 ---- 克隆域服务器
查看>>
14-Windows Server 2012 新特性 ---- 服务器管理器
查看>>
Microsoft Dynamics CRM 2013 的权限管理与分配 (一)
查看>>
SQLSserver2008安装默认账户介绍
查看>>
zabbix 监控主机tcp连接数
查看>>
频繁变化的表无效索引造成的热点块争用
查看>>
Windows 10 之重新安装应用
查看>>
Citrix Xenserver 审核日志事件
查看>>
IIS中搭建web服务器
查看>>
FTP与SAMBA文件服务器搭建
查看>>
【VMCloud云平台】SCSM(十)服务请求到资源落地
查看>>
Maven组件通过命令上传本地和私有仓库
查看>>
TrendMicro:针对以色列美国等国的基于Xtreme RAT的APT***
查看>>
Java编程时间格式与数据库中时间格式转化
查看>>
部署Silverlight项目到Windows Azure云平台实例
查看>>
DPM2012系列之一:安装Data Protection Manager 2012
查看>>
PhpGACL手册(一)
查看>>
DB2中如何快速定位锁等待语句
查看>>