当前位置: 首页 > 面试题库 >

为什么终结器有“严重的性能损失”?

汪臻
2023-03-14
问题内容

有效的Java说:

使用终结器会严重影响性能。

为什么使用终结器销毁对象会更慢?


问题答案:

由于垃圾收集器的工作方式。为了提高性能,大多数Java GC使用复制收集器,将短期对象分配到“
eden”内存块中,当需要收集该代对象时,GC只需要复制那些仍然“活跃”到更永久的存储空间,然后它可以立即擦除(释放)整个“
eden”存储块。这是有效的,因为大多数Java代码会创建生命周期只有几秒钟的数千个对象实例(盒装原语,临时数组等)。

但是,当您有终结器时,GC不能简单地一次擦除整个一代。相反,它需要找出该代中需要完成的所有对象,并将它们放在实际执行终结器的线程上排队。同时,GC无法有效地清理对象。因此,它要么必须使它们的生存期超过其应有的生存时间,要么就必须延迟收集其他对象的时间,或者两者都延迟。另外,您还有实际执行终结器的任意等待时间。

所有这些因素加重了运行时间,这就是为什么close()通常首选确定性终结(使用方法或类似方法来明确终结对象的状态)的原因。



 类似资料:
  • 我使用GWT2.7,并希望在我的应用程序中提供带有级别信息和警告的日志记录。在我的gwt.xml文件中,我有: 它在开发模式下工作得很好,但在SuperDevMode中,我只能记录严重的日志级别。 为什么SuperDevMode只提供LogLevel严重?

  • 在每个纪元结束时,我会得到以下输出: 谁能给我解释一下损失、准确性、验证损失和验证准确性之间有什么区别吗?

  • 问题内容: 我尝试使用和设置元素的样式。 然而,它没有工作:表现得像,并表现得像个。 在Firefox和Chrome上都会发生这种情况,但奇怪的是,它在IE上有效。 是虫子吗?在HTML5和CSS Flexible Box Layout规范中,我都找不到应该有的特殊行为。 问题答案: 根据错误984869- 对按钮元素不起作用, 不能在纯CSS中实现(由浏览器实现),因此从CSS的角度来看,它们有

  • 我正在尝试让以下SVG在所有主要浏览器中工作: 这就是我正在努力实现的结果(Chrome): 在Firefox中,这是很好的,但斜面不是那么明显: 下面是代码页:https://codepen.io/jugglingcats/pen/grpwobk。 非常感谢任何帮助!!

  • 问题内容: Java不允许枚举位于接口内部,但是默认情况下,接口内部的每个数据成员都是。有人可以澄清吗? 问题答案: 枚举不能是最终的,因为编译器将为程序员明确为其定义实现的每个枚举条目生成子类。 此外,根据JLS第8.9节,没有实例具有自己的类主体的枚举是隐式最终的。

  • 我想为我的方法创建一个发送计时器指标的注释。我想做这样的事情: 然后,我想使用AspectJ进行度量收集逻辑,如下所示: 我想了解的是,我不知道如何对其进行基准测试,在这里使用此注释时是否会有性能损失。