我们可以关闭终结器吗?

2023-12-26

由于无法保证终结器何时运行以及是否会运行,而且如今终结器几乎被认为是一种气味 - 有什么方法可以说服 JVM 完全跳过所有终结过程吗?

我问这个问题是因为我们有一个庞大的应用程序,当它迁移到较新的 JVM(现阶段不确定是哪个)时,它会因为看起来非常类似于终结器的已知问题而崩溃(抛出异常,因此 GC 非常慢) 。

Added

有一些讨论java 内存泄漏故障排除:终结? https://stackoverflow.com/q/7644556/823393其中建议主要问题是在终结器中抛出异常时出现的,因为这会大大减慢终结过程。

当内存变低并且堆转储分析显示大量内存时,我的问题显示速度显着减慢Finalizer对象(超过 10,000,000) - 对我来说,速度减慢可能是他们的错,因为他们延迟了 GC。显然我可能是错的。

我没有权力要求重构。


有什么方法可以说服 JVM 完全跳过所有终结过程吗?

一句话说不。

但除非你的大部分对象都有finalize方法和/或finalize方法特别昂贵,我认为它们不太可能使 GC“非常慢”。我预计问题是别的。

我建议您打开 GC 日志记录以尝试更好地了解实际发生的情况。

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


UPDATE- 你的新证据非常有说服力,尽管不是证据!

我没有权力要求重构。

然后,我建议您将证据放在这样做的人的脚下:-)。

或者,您可以向嫌疑人添加异常处理程序finalize方法来看看它们是否are抛出异常。 (如果是,则更改它们以避免抛出异常......)

但底线是,如果终结是性能问题的真正原因,那么解决这些问题的最佳(也可能是唯一)方法就是更改代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我们可以关闭终结器吗? 的相关文章

随机推荐

  • 在 Safari 中检测 iOS 上的初始设备方向

    我知道怎么做检测设备方向变化 https developer apple com library safari documentation SafariDOMAdditions Reference DeviceOrientationEven
  • OSGI捆绑异常,maven依赖问题

    我对 OSGI Felix 和 Maven 还很陌生 刚刚开始使用 我正在通过 jenkins 部署 java 构建 并且遇到以下依赖问题 下面是包含依赖项的pom文件内容 我不确定它是否正确 但它仍然抱怨它 它正在寻找 javax jws
  • Qt Creator 无法在 Mac 上启动调试

    最近 我怀疑某些系统 自制程序更新 Qt 的调试器停止工作 它永远挂在Setting up inferior 内部日志 dStart parameters QGIS mode 1 dABI x86 darwin generic mach o
  • SQL 如果没有返回行则执行此操作

    我有一个 select 语句 我想说如果这个 select 语句不返回任何行 则在每个单元格中放置一个 我该怎么做呢 select a b c from t if rowcount 0 select as a as b as c 但请确保你
  • 如何在Python中使用BeautifulSoup从标签中提取innerHTML

    我正在尝试使用以下代码从标签中提取innerHTML theurl http na op gg summoner userName Darshan thepage urlopen theurl soup BeautifulSoup thep
  • google oauth2 刷新令牌何时过期?

    google oauth2 刷新令牌何时过期 我所说的过期的意思是由于已经过了一定的时间跨度而过期 不是因为用户已撤销访问权限或因为用户已请求新的刷新令牌 我做了一些研究 但没有一个引用官方谷歌文档 我也找不到有效的谷歌文档 其他一些问题说
  • Mongo 更新子文档

    我在使用 MongoDB 时似乎遇到了障碍 并且想知道是否有解决方案 而无需修改我的数据库结构 现在我的数据库结构如下 Company id 1 properties property id 1 tags tag id 1 tag valu
  • 使用 PHP/AJAX 从 HTML 表单发送电子邮件

    我想将用户从 HTML 表单填写的信息发送到我的电子邮件地址 根据我的理解 由于电子邮件工作方式的性质 仅使用客户端编码无法完成此操作 因此建议使用 PHP 与 AJAX 结合 来处理服务器端代码 我跟着导游here https stack
  • 无法在 x86 ubuntu linux 上添加自定义系统调用

    我对此很陌生 刚刚了解内核 我正在尝试添加对内核 4 20 4 的自定义调用 这是我所做的步骤 首先我创建文件 kernel printmsg c 包含代码 include
  • 在 Windows 7 上安装 Cabal-dev

    我正在尝试在 Windows 7 上安装 Cabal dev 我已经设法通过使用以下方法解决了无法构建网络的问题 cabal install constraint network installed cabal dev 但是后来我得到了这个
  • Spring Mvc java.io.FileNotFoundException - ApplicationContext.xml

    applicationContext xml 位于 WEB INF 文件夹中 为什么我收到此错误 org springframework beans factory BeanDefinitionStoreException IOExcept
  • IE9 开发者工具中的 IE9 兼容性视图是什么?

    我正在查看 IE 9 开发人员工具 当我单击浏览器模式时 我会看到一个列表 IE 7 IE 8 IE 9 IE 9 Compatibility View 那有什么作用 IE 9 和 IE 9 兼容性视图有什么区别 The main区别在于用
  • kali linux python3-pip 面临的问题

    我面临这个问题 sudo apt get install python3 pip Reading package lists Done Building dependency tree Reading state information D
  • 逆向工程 iWork '13 格式

    Apple iWork 套件的早期版本使用非常简单的文档格式 文档是资源包 文件夹 压缩或未压缩 该捆绑包包含一个index apxl z 以专有但相当容易理解的模式描述文档结构的文件 iWork 13 完全重做了格式 文档仍然是捆绑包 但
  • 如何在 Asp.net MVC 中使用代码优先方法更新模型和数据库

    我是新来的mvc 我创建了一个MVC应用程序 我在其中使用过code first方法 现在我有两张桌子Deal and Comment 现在我想添加一个新表Category在数据库和新列中类别ID in Deal table 我如何更新数据
  • Android PICASSO - 图像未加载到 ImageView + 停止发生以下所有语句

    背景 我的 java 文件中有一个 Picasso 语句 它读取 JSON 然后将该数据格式化到屏幕上 问题 读取 JSON 后 Picasso 不会将图像从 URL 加载到 ImageView 而是停止此后发生的所有语句 例如在 Text
  • 从 bmp 中获取平均颜色

    我正在为第二个屏幕开发一个任务栏 类似于displayfusion 但是 我很难从图标中获得正确的平均颜色 例如 Google Chrome 当我将其悬停在主任务栏上时 它的背景会变成黄色 使用我的代码它会变成橙色 红色 现在看起来是这样的
  • 设计函数 f(f(n)) == -n

    上次面试时我被问到的一个问题 设计一个函数f 这样 f f n n Where n是32位的有符号整数 你不能使用复数算术 如果您无法为整个数字范围设计这样的函数 请为尽可能最大的范围设计它 有任何想法吗 你没有说他们期望什么样的语言 这是
  • 覆盖paint或paintComponent时需要恢复图形原始状态

    我意识到大多数Java代码都覆盖了paint或paintComponent 它们中的大多数在改变图形对象的状态后并没有恢复图形对象的旧状态 例如 setStroke setRenderingHint 我想知道在从方法返回之前恢复图形对象的旧
  • 我们可以关闭终结器吗?

    由于无法保证终结器何时运行以及是否会运行 而且如今终结器几乎被认为是一种气味 有什么方法可以说服 JVM 完全跳过所有终结过程吗 我问这个问题是因为我们有一个庞大的应用程序 当它迁移到较新的 JVM 现阶段不确定是哪个 时 它会因为看起来非