新闻中心

j*a中finalize的重写

2025-12-06
浏览次数:
返回列表
finalize()自J*a 9起被弃用、J*a 18彻底移除,因其调用时机不确定、性能开销大、线程不安全、异常被吞且无法保证执行;应改用AutoCloseable+try-with-resources、Cleaner或显式释放。

java中finalize的重写

J*a 中 finalize() 方法已被标记为 @Deprecated,自 J*a 9 起不推荐使用,J*a 18 开始彻底移除(JEP 421),因此不建议重写 finalize,也不应依赖它来释放资源。

为什么 finalize 不该被重写

该方法由垃圾回收器在对象真正回收前调用,但存在严重问题:

  • 调用时机不确定:GC 可能永远不运行,或延迟极久,导致资源长期泄漏
  • 性能开销大:启用 finalize 的对象需经历至少两次 GC 才能回收(称为“finalization queue”机制)
  • 线程不安全:finalize 在专用 Finalizer 线程中执行,可能与主线程竞争资源
  • 异常会被吞掉:finalize 中抛出的未捕获异常不会传播,仅被忽略,难以调试
  • 无法保证执行:JVM 退出时,未执行的 finalize 可能直接跳过

替代 finalize 的正确做法

资源清理应主动、及时、可预测。推荐以下方式:

  • 实现 AutoCloseable 接口 + try-with-resources:适用于文件、网络连接、数据库连接等需要显式关闭的资源
  • 使用 Cleaner(J*a 9+):轻量、无性能惩罚的清理机制,基于虚引用(PhantomReference),比 finalize 更可靠
  • 显式释放 + 文档约定:在类文档中明确说明需调用 close()shutdown(),并提供默认空实现防止误用

示例(Cleaner):

网奇企业网站管理系统CWMS2.0 英文版 网奇企业网站管理系统CWMS2.0 英文版

CWMS 2.0功能介绍:一、 员工考勤系统,国内首创CWMS2.0的企业员工在线考勤系统。二、 自定义URL Rewrite重写,友好的搜索引擎 URL优化。三、 代码与模板分离技术,支持超过5种类型的模板类型。包括:文章、图文、产品、单页、留言板。四、 购物车功能,CWMS2.0集成国内主流支付接口。如:淘宝、易趣、快钱等。完全可媲美专业网上商城系统。五、 多语言自动切换 中英文的说明。六、

网奇企业网站管理系统CWMS2.0 英文版 0 查看详情 网奇企业网站管理系统CWMS2.0 英文版
public class Resource {
    private static final Cleaner cleaner = Cleaner.create();
    private final Cleanable cleanable;
    private final ByteBuffer buffer;

    public Resource() {
        this.buffer = ByteBuffer.allocateDirect(1024);
        this.cleanable = cleaner.register(this, new ResourceCleaner(buffer));
    }

    // 清理动作封装为 Runnable
    private static class ResourceCleaner implements Runnable {
        private final ByteBuffer buffer;
        ResourceCleaner(ByteBuffer buffer) { this.buffer = buffer; }
        public void run() { CleanerTest.freeDirectBuffer(buffer); }
    }

    // 显式清理(可选,用于提前释放)
    public void close() { cleanable.clean(); }
}

如果旧代码里还有 finalize ……

请尽快迁移。若暂时无法删除,注意:

  • 必须调用 super.finalize()(否则父类清理逻辑丢失)
  • 不要在 finalize 中重新使对象“复活”(如将 this 赋值给静态变量),这会导致内存泄漏且破坏 GC 正确性
  • 避免任何耗时操作或同步块,否则会阻塞 Finalizer 线程,拖慢整个 JVM 的回收

基本上就这些。finalize 是个历史包袱,现代 J*a 开发中应当完全绕过它。

以上就是j*a中finalize的重写的详细内容,更多请关注其它相关文章!


# 时长  # 佛山百度seo实力乐云seo  # 高港外贸营销之线上推广  # seo501  # 品牌推广逆传播营销渠道  # 湛江360关键词排名  # 闽清企业seo推广  # 淡水seo推广价格  # 推广营销的发展阶段包括  # 新媒体交互设计网站推广  # seo优化有哪些特征  # 移除  # java  # 不安全  # 转换为  # 不确定  # 好了  # 企业网站  # 英文版  # 管理系统  # 重写  # 为什么  # 垃圾回收器  # finalize 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Discord Slash 命令响应超时问题的异步解决方案  将JSON对象数组转置为键值对列表的实用指南  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  内存疯狂猛猛涨价:主板销量直接腰斩!  Linux如何构建多环境配置管理_Linux多环境配置方案  Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】  在J*a中如何隐藏复杂性_使用门面模式组织对象交互  HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  如何使用Go和Martini动态服务解码后的图片  mysql备份恢复性能优化_mysql备份恢复性能优化方法  EMS快递官网app_中国邮政速递物流手机客户端  解决Django多数据库/多Schema环境下外键迁移问题  cad如何更改注释性对象的比例_cad注释性比例调整方法  铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则  sublime怎么格式化代码_sublime代码美化与一键排版插件配置  荒野行动PC版怎么注册_荒野行动PC版账号注册详细流程图文教程  新三国志曹操传110级星符试炼夏侯渊极难攻略  Win11输入法不见了怎么办_Windows11恢复语言栏显示方法  高德地图公交到站提醒失败如何解决 高德提醒权限设置  GemBox Document HTML转PDF垂直文本渲染问题及解决方案  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  响应式容器内容自动缩放与宽高比维持教程  深入理解Promise链:如何在catch后中断then的执行  Golang如何优化CPU绑定任务分配策略_Golang CPU任务分配优化实践  Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  Go语言中对Map值调用带指针接收者方法:原理与最佳实践  在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南  新手怎么开始学化妆 零基础化妆入门教程  12306几点到几点不能订票? | 官方最新系统维护时间全解析  探索高级语言到原生C/C++的转译:挑战与内存管理策略  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖  AI泡沫首次被“刺破”:GPU十年都无法存活!  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  Go语言中Map存储的结构体如何调用指针方法:深入解析与实践  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口  解决 Express.js 中 PUT 请求密码修改失败的路由配置指南  vivo云服务网页版登录 怎么登录vivo云服务网页版  12306选座如何查看座位示意图_12306座位示意图解读与使用  CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整  动漫花园资源网使用步骤_动漫花园资源网下载流程  谷歌推RCS信息存档功能:公司可监控员工私密信息!  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正 

搜索