gpt4 book ai didi

Java 不释放带有 finalize() 覆盖的对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:23 24 4
gpt4 key购买 nike

我的应用程序使用第三方库(JTDS 驱动程序),该库具有一些覆盖 finalize() 方法的对象。我认为他们遵守关于何时不使用 finalize() 的所有规则 - 这不取决于他们及时运行或根本不运行。

问题是它们的对象永远不会被释放。它们似乎卡在了 Finalizer 队列中并且从未被移除。它们会在几周内缓慢建立起来,并在堆空间之外运行 JVM。线程转储显示 Finalizer 线程正等待调用 finalize()。如果我调用 System.runFinalization(),对象将完成并从终结器队列中正确删除(并且不再出现在堆转储中)。

为什么 System.runFinalization() 会正确移除对象,但 Finalizer 线程不会自行执行?

最佳答案

今天遇到了同样的问题。您没有指定正在使用的 JVM,但以防万一它是 OpenJDK - 存在错误 https://lists.launchpad.net/openjdk/msg10021.html他们说它已经修复,所以您只需要升级即可。

关于Java 不释放带有 finalize() 覆盖的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22379588/

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