写点什么

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

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

关注

评论

发布
暂无评论
  • Java 多线程:锁

    Java 多线程:锁

    2022-09-12

  • 你必须知道的 Java 泛型

    文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger

    2022-08-20

  • Java 多线程基础(二)

    同步代码块

    2022-05-10

  • java 零基础入门 -Java 反射机制

    哈喽,各位小伙伴们好,我是喵手。day3

    2022-07-08

  • 10 分钟带你彻底搞懂 Spring Boot 的系统监控机制

    讲师介绍: 萧亦然,资深技术专家、TGO 鲲鹏会会员、阿里云 MVP、腾讯云 TVP。 问题背景: 对于任何一个 Java 应用程序开发而言,运行时的监控机制都是必不可少的。业界也存在一些优秀的技术体系能够帮助我们监控应用程序的状态,但这些技术体系一般都需要引入第三方框架,而 Spring Boot 的诞生就改变了这一现状。Spring Boot 通过 Actuator 组件内置了很多实用的监控特性。同时,该组件也为开发人员提供了高度的扩展性,一方面我们可以在现有监控端点的基础上进行扩展,另一方面也可以实现自定义的 Actuator 端点。 内容看点: Spring Boot Actuator Spring Boot Admin

    2022-02-22

  • 你真的懂 Java 泛型吗?

    2021-10-19

  • Java 线程池源码深度解析

    线程池的好处和使用本篇文章就不赘叙了,不了解的可以参考下面两篇文章:

    2022-10-23

  • Java stream 流用法总结

    Page<TbMemberDeductionSettingDto> memberDeductionSettingDtoPage = new Page<>();

    2022-05-14

  • Java 基本语法

    原文链接

    2023-01-12

  • Java 泛型 T,E,K,V,,傻傻分不清?

    前言

    2022-08-16

  • Java 中的复用类

    }

    2022-04-25

  • 外部函数接口,能不能取代 Java 本地接口?

    今天,我们一起来讨论Java的外部函数接口。

    2021-12-13

  • Java 四种线程池

    }

    2022-05-13

  • 10 分钟带你彻底搞懂 Dubbo 集群容错机制

    讲师介绍: 萧亦然,资深技术专家、TGO 鲲鹏会会员、阿里云 MVP、腾讯云 TVP。 问题背景: 当跨服务之间的远程调用发生异常时,我们就需要引入服务容错机制来防止发生雪崩。Dubbo 框架通过引入集群实现了 Failover、Failfast 等一组服务容错的实现机制。学习优秀框架中的这些服务容错机制对我们设计系统架构也有很好的参考价值。 内容看点: Dubbo 中的集群 集群容错机制

    2022-04-08

  • Java 多线程 关闭线程池 shutdown() 、shutdownNow()、awaitTermination()

    ThreadPoolExecutor

    2022-10-18

  • 设计模式新解之延迟加载设计模式

    我们知道在系统运行过程中,有些对象的创建成本是很高的,需要消耗比较多的系统资源。对于这些对象而言,我们采用的策略应该是:只要当用到它们时才进行创建,也就是按需获取,而不是尽早获取。这时候,我们就可以引入今天要介绍的延迟加载设计模式。延迟加载属于资源管理的一种设计模式,用来提高对大数据量资源的访问效率。 讲师介绍 萧亦然,资深技术专家、TGO 鲲鹏会会员、阿里云 MVP、腾讯云 TVP。 内容看点 延迟加载模式的基本概念和结构 延迟加载模式的实现方式 延迟加载模式在 MyBatis 中的应用

    2022-09-30

  • Go 语言入门 09—结构体

    相比于Java,在Go语言中没有类的概念,但是多了结构体。结构体与Java中的类很像,是表示一系列同一类型或不同类型的数据构成的数据集合。

    2022-10-30

  • 10 分钟带你彻底搞懂 Dubbo 远程调用本地化的实现原理

    对于 RPC 而言,它最基本的功能就是实现远程调用。Dubbo 作为一款非常主流的 RPC 框架,在实现远程调用过程中采用了巧妙的设计方法,确保开发人员能够像使用本地方法一样,来对远程服务发起请求并获取响应结果。那么,Dubbo 是如何做到这一点的呢?这一节课,我将和你来详细分析一下 Dubbo 远程调用的执行流程和实现原理。 讲师介绍 萧亦然,资深技术专家、TGO 鲲鹏会会员、阿里云 MVP、腾讯云 TVP。 内容看点 远程调用与代理机制之间的交互关系 Dubbo 中,远程调用的执行过程

    2022-08-19

发现更多内容

SchedulX V1.4.0及SaaS版发布,免费体验降本增效高级功能!

星汉未来

DevOps 运维 k8s IT FinOps

小程序能运行在自有App中,且实现直播和连麦?

Speedoooo

小程序 直播 移动开发 小程序容器 连麦

枚举通用接口&枚举使用规范

靠谱的程序员

枚举 企业应用 企业级应用

牛客java选择题每日打卡Day8

京与旧铺

7月月更

【愚公系列】2022年7月 Go教学课程 005-变量

愚公搬代码

7月月更

张平安:加快云上数字创新,共建产业智慧生态

华为云开发者联盟

云计算 后端 SaaS 华为云

leetcode 53. Maximum Subarray 最大子数组和(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

算法入门很简单:算法题的破解之道上篇

宇宙之一粟

算法 7月月更

java零基础入门-Scanner类

喵手

Java’ 7月月更

谈谈讲清楚这件事的重要性

阿里巴巴中间件

阿里云 技术 云原生

企业数字化转型,低代码是“趋势”还是“陷阱”?

云智慧AIOps社区

大前端 低代码 云开发

阿里云易立:云原生如何破解企业降本提效难题?

阿里巴巴中间件

阿里云 架构 云原生

华为小米互“抄作业”

科技新知

抖音或将推出独立种草社区平台:会不会成为第二个小红书

石头IT视角

架构实战营模块 6 作业

Roy

架构实战营

一个酷酷的“幽灵”控制台工具

为自己带盐

C# 控制台 7月月更

【问道】编译原理解析

小明Java问道之路

编译原理 编译器 汇编语言 7月月更 Graal编译器

Flutter3.0了,小程序不止于移动应用跨端运行

Speedoooo

flutter 小程序 移动开发 小程序容器 跨端运行

用头像模仿天狗食月

急需上岸的小谢

7月月更

组织实战攻防演练的5个阶段

穿过生命散发芬芳

攻防演练 7月月更

offer如何选择该考虑哪些因素

KEY.L

7月月更

从0开始创建小程序

小恺

7月月更

“去虚向实”大潮下,百度智能云向实而生

科技新知

Linux 下的传统 IPC 通信原理

北洋

Andriod 7月月更

ServiceMesh主要解决的三大痛点

阿泽🧸

Service Mesh 7月月更

Salesforce 容器化 ISV 场景下的软件供应链安全落地实践

阿里巴巴中间件

阿里云 容器 云原生 安全

HAVE FUN | “飞船计划”活动最新进展

SOFAStack

微服务架构 开源软件 新手引导

【写给初发论文的人】撰写综述性科技论文常见问题

左手の明天

论文阅读 论文 论文写作 研究论文 论文撰写

当 Knative 遇见 WebAssembly

阿里巴巴中间件

阿里云 容器 云原生 Knative WebAssenbly

Ubuntu22.04 源码安装Python3.10

IT蜗壳-Tango

7月月更

【刷题记录】2. 两数相加

WangNing

7月月更

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