gpt4 book ai didi

java - 为什么终结器有 "severe performance penalty"?

转载 作者:IT老高 更新时间:2023-10-28 20:27:58 25 4
gpt4 key购买 nike

有效的 Java 说:

There is a severe performance penalty for using finalizers.

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

最佳答案

因为垃圾收集器的工作方式。出于性能考虑,大多数 Java GC 使用复制收集器,其中短期对象被分配到“伊甸园”内存块中,当该代对象被收集时,GC 只需要复制那些仍然“活着”到更永久的存储空间,然后它可以一次删除(释放)整个“伊甸园”内存块。这是高效的,因为大多数 Java 代码将创建数千个对象实例(盒装基元、临时数组等),其生命周期只有几秒钟。

但是,当您混合使用终结器时,GC 不能简单地一次删除整个代。相反,它需要找出该代中需要终结的所有对象,并将它们排队在实际执行终结器的线程上。同时,GC 也无法有效地完成对对象的清理。因此,它要么必须使它们保持比应有的生命周期更长,要么必须延迟收集其他对象,或两者兼而有之。此外,您还有实际执行终结器的任意等待时间。

所有这些因素加起来会导致显着的运行时损失,这就是为什么通常首选确定性终结(使用 close() 方法或类似方法来显式终结对象的状态)的原因。

关于java - 为什么终结器有 "severe performance penalty"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com