写点什么

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:005580
用户头像

发布了 321 篇内容, 共 129.7 次阅读, 收获喜欢 139 次。

关注

评论

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

新思科技:数字赋能,安全先行

InfoQ_434670063458

如何又快又好实现Catalog系统搜索能力?火山引擎DataLeap这样做

字节跳动数据平台

大数据 数据治理 数据研发 企业号 2 月 PK 榜

泛娱乐社交出海解决方案技术实践

网易云信

即时通讯IM 音视频技术

云原生场景下实现编译加速

京东科技开发者

Java golang 缓存 编译 企业号 2 月 PK 榜

Getaverse 1月总结 | 节点数突破6200+

Geek_Web3

#区块链# 元宇宙 web3

利器 | AppCrawler 自动遍历测试工具实践(一)

霍格沃兹测试开发学社

云小课|创建DDS只读节点,轻松应对业务高峰

华为云开发者联盟

数据库 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

对话 BitSail Contributor | 梁奋杰:保持耐心,享受创造

字节跳动数据平台

GitHub 开源 数据引擎

不愧是阿里内部都在强力进阶学习springboot实战派文档,这细节讲解,神了!

架构师之道

Java 面试 架构师 springboot

SpringBoot 如何保证接口安全?老鸟们都是这么玩的!

程序知音

Java spring 架构

开源机器学习软件对AI的发展意味着什么?

OneFlow

人工智能 深度学习 开源

优化器-RBO 的规则转化

KaiwuDB

RBO 数据库优化器

“一键”模型迁移,性能翻倍,多语言AltDiffusion推理速度超快

OneFlow

人工智能 深度学习

下一代编解码技术Ali266在视频超高清领域的应用展望

阿里云视频云

云计算 Ali266 超高清

上新啦|请查收StarRocks 2.5 LTS 版本特性介绍

StarRocks

数据库 大数据

一文带你掌握物联网Mqtt网关搭建背后的技术原理

华为云开发者联盟

后端 物联网 华为云 企业号 2 月 PK 榜 华为云开发者联盟

系统运维 SysOM profiling 在云上环境的应用观测实践 | 龙蜥技术

OpenAnolis小助手

开源 cpu 系统运维 profiling 龙蜥技术

还在用 OpenFeign?来试试 SpringBoot3 中的这个新玩意!

江南一点雨

spring springboot

Dubbo 中 Zookeeper 注册中心原理分析

小小怪下士

Java zookeeper dubbo

升哲科技荣获2022年度华夏建设科学技术奖二等奖

SENSORO

测试开发 | AppCrawler 自动遍历测试实践(二):定制化配置

霍格沃兹测试开发学社

测试开发 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

霍格沃兹测试开发学社

八股文的天花板,没到35k的Java开发都值得好好读一读

程序知音

java面试 后端技术 八股文 Java面试八股文 Java构架师

打通对账的最后一公里——对账管理平台

元年技术洞察

数字化转型 对账 对账系统 方舟平台

StarRocks荣获2022年度最具潜力数据库奖

StarRocks

数据库 大数据

Kratos微服务工程Bazel构建指南

喵个咪

微服务 CMS Kratos Monorepo bazel

巧用Golang泛型,简化代码编写

百度Geek说

Go golang 企业号 2 月 PK 榜

关于 NGINX Kubernetes Gateway,你需要知道的 5 件事

NGINX开源社区

nginx NGINX Ingress Controller NGINX Kubernetes Gateway 企业号 2 月 PK 榜

如何快速完成API设计,mock数据给到前端?

不想敲代码

APi设计 apipost API调试

泛娱乐社交出海解决方案技术实践

网易智企

即时通讯IM 音视频通话

JavaScript使用URL用来解析处理URL

ModStart

  • 扫码添加小助手
    领取最新资料包
Java将弃用finalize()方法?_Java_Ben Evans_InfoQ精选文章