“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

Java 将弃用 finalize() 方法?

  • 2017-03-29
  • 本文字数:720 字

    阅读完需:约 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 里弃用,或者在更晚的版本里,目前尚无定论。

查看英文原文: Java finalization to be deprecated?

2017-03-29 19:005659
用户头像

发布了 322 篇内容, 共 133.6 次阅读, 收获喜欢 142 次。

关注

评论

发布
暂无评论
发现更多内容

Android的Io模型你了解多少,享学androidVIP课程百度云种子

android 程序员 移动开发

Android程序员必经的实践之路:享学课堂

android 程序员 移动开发

Android程序员必经的实践之路:享学课堂androidVIP网盘资源

android 程序员 移动开发

设计模式--策略模式与工厂模式

en

设计模式 工厂模式 策略模式

CICD sonarqube卡点实现思路

消失的子弹

Kubernetes DevOps CI/CD drone

Android程序员最新职业规划,熬了整整30天

android 程序员 移动开发

android组件化实现,动脑Android

android 程序员 移动开发

Android自学教程!android底层开发百度网盘

android 程序员 移动开发

android设计模式面试,享学三期Android架构师

android 程序员 移动开发

Android知识体系大纲!动脑学院官网

android 程序员 移动开发

Android经典面试题详解:kotlin入门教程百度网盘

android 程序员 移动开发

Android资深架构师分享学习经验及总结,Android开发还不会这些

android 程序员 移动开发

Android知识总结,动脑学院官网

android 程序员 移动开发

Android系列学习进阶视频,扔物线课程怎么样

android 程序员 移动开发

android组件化通信,享学课堂

android 程序员 移动开发

2021 腾讯数字生态大会重磅来袭

CODING DevOps

云原生 腾讯数字生态大会 降本增效

android视频开发的面试问题,享学三期Android架构师

android 程序员 移动开发

android路由表位置,扔物线朱凯

android 程序员 移动开发

Android的Io模型你了解多少?android开发教程百度网盘

android 程序员 移动开发

Android程序员架构之路该如何继续学习,华为架构师深入讲解Android开发

android 程序员 移动开发

Android程序员架构之路该如何继续学习,纯干货

android 程序员 移动开发

Android系列学习进阶视频,kotlin入门教程百度网盘

android 程序员 移动开发

Android社招面试题,真香

android 程序员 移动开发

Android组件化入门,想搞定大厂面试官

android 程序员 移动开发

Android经典面试:动脑学院

android 程序员 移动开发

android热更新图片,动脑学院视频百度云

android 程序员 移动开发

android组件化和插件化,android开发入门与实战网盘

android 程序员 移动开发

android组件化实现,享学androidVIP课种子

android 程序员 移动开发

android组件化开发框架,kotlin入门教程百度网盘

android 程序员 移动开发

Android自学!扔物线android视频

android 程序员 移动开发

Android资深架构师分享学习经验及总结,三面美团Android岗

android 程序员 移动开发

Java将弃用finalize()方法?_Java_Ben Evans_InfoQ精选文章