gpt4 book ai didi

java - 是内存泄漏吗?为什么 java.lang.ref.Finalizer 吃掉这么多内存

转载 作者:IT老高 更新时间:2023-10-28 20:22:12 43 4
gpt4 key购买 nike

我在我的程序上运行了一个堆转储。当我在内存分析工具中打开时,发现 org.logicalcobwebs.proxool.ProxyStatementjava.lang.ref.Finalizer 占用了大量内存.为什么会这样?

screenshot

最佳答案

一些类实现了 Object.finalize() 方法。覆盖此方法的对象需要由后台线程调用终结器调用,并且在这种情况发生之前无法清理它们。如果这些任务很短,并且您没有丢弃其中的许多任务,那么一切都很好。但是,如果您要创建大量这些对象和/或它们的终结器需要很长时间,则要终结的对象队列会增加。这个队列有可能会用完所有的内存。

解决办法是

  • 尽可能不要使用 finalize()d 对象(如果您正在为对象编写类)
  • 使 finalize 非常短(如果你必须使用它)
  • 不要每次都丢弃此类对象(尝试重复使用它们)

当您使用现有库时,最后一个选项可能最适合您。

关于java - 是内存泄漏吗?为什么 java.lang.ref.Finalizer 吃掉这么多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8355064/

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