我们可以关闭终结器吗?

 程武钢2011 发布于 2023-02-06 12:08

由于几乎没有保证什么时候,甚至终结器运行和终结器几乎被认为是现在的气味 - 有没有办法说服JVM完全跳过所有的终结过程?

我问,因为我们有一个庞大的应用程序,当移动到一个较新的JVM(不确定在这个阶段)是什么看起来非常像终结者的已知问题(抛出异常,因此非常慢的GC) .

添加

有关Java内存泄漏故障排除的讨论:终结?建议在终结器中抛出异常时出现主要问题,因为这会大大减慢终结过程.

当内存变低并且堆转储分析显示大量Finalizer对象(超过10,000,000)时,我的问题显示为急剧减速- 向我建议减速可能是他们的错,因为他们正在推迟GC.显然我可能是错的.

我没有权力要求重构.

1 个回答
  • 有没有办法说服JVM完全跳过所有的终结过程?

    一句话

    但除非您的大部分对象都有finalize方法和/或finalize方法特别昂贵,否则我认为它们不太可能使GC"非常慢".我希望问题不是别的.

    我建议您打开GC日志记录,尝试更好地了解实际情况.

    但我也同意,finalize()从长远来看,重构代码以摆脱这些方法可能是一件好事.(极少数情况下,使用finalize真正是最佳解决方案.)


    更新 - 你的新证据非常有说服力,但不是证明!

    我没有权力要求重构.

    然后,我建议你把证据放在那些做的人脚下:-).

    或者,您可以向可疑finalize方法添加异常处理程序,以查看它们是否抛出异常.(如果是,那么改变它们以避免抛出异常......)

    但最重要的是,如果最终确定是您的性能问题的真正原因,那么最好(也可能是唯一)治愈它们的方法是更改​​代码.

    2023-02-06 12:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有