【问题标题】:Java Finalization Queue and memory leaksJava 终结队列和内存泄漏
【发布时间】:2014-05-16 14:49:35
【问题描述】:

如何获取所有等待完成的对象的列表?,以便我可以手动完成它。

目前我没有得到直接方法来获取所有等待完成的对象。

【问题讨论】:

  • 没有(合法的)方法可以做到这一点。如果您的对象没有最终确定,可能有两个原因:1. GC 尚未触发 2. 您仍然在某处持有这些对象的链接
  • 我不感兴趣,但是一个搜索关键词应该是幻影参考
  • 尝试找出你的对象没有完成的原因,它应该可以解决你的内存泄漏问题。通过显式调用 finalize 方法,您无法预测何时以及是否会调用该方法。
  • 我不知道您是否有内存泄漏或者您只是在完成时尝试执行一些代码。要指定在对象完成之前要做什么,您可以覆盖 Object.finalize()
  • 最终确定对象来自第三方库或 ActiveMQ 等框架。我无法控制它们,在 Yourkit 中进行性能分析时,我发现等待最终确定的对象为 6K 到 20K 20VUSER 负载。我每 20 分钟触发一次 Full GC,然后运行 ​​System.runFinalization,我看不到任何改进。我想明确获取等待完成的对象列表并使用 object.finalze() 释放它们

标签: java memory-leaks finalize finalization


【解决方案1】:

您可以使用ManagementFactory.getPlatformMBeanServer() 来完成此操作。详细描述可以在这里找到:http://www.javaspecialists.eu/archive/Issue170.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多