【问题标题】:Memory leaks in application应用程序中的内存泄漏
【发布时间】:2016-03-22 14:26:22
【问题描述】:

我的javaFX 应用程序中似乎有memory leak 问题,我一直在使用 net beans 分析器工具来帮助我定位泄漏源,但我碰壁了,因为我不确定到底是什么我正在做。

现在我查看了教程,他们说要监视对象的surviving generations,但我仍然不确定如何处理这些信息。我在监控我的应用程序时截取了最高 surviving generation 对象的屏幕截图。

有人可以向我解释一下我应该对这些对象做什么,还是它们实际上会导致memory leak

【问题讨论】:

  • 看看这个:stackoverflow.com/questions/6470651/… 这不是你的问题的答案,但是有一些关于如何在 Java 中创建内存泄漏的好例子。这可能会帮助您定位您的问题(如果存在问题的话。很难说不知道您的程序应该做什么;))
  • @noobCoder 您是否能够使用 Eclipse MAT 找到问题?
  • 还没有,但它为我指明了正确的方向。我目前暂时把它放在次要位置,因为我觉得我可以花很多时间来寻找问题,而我现在根本没有,因为我必须在未来几天展示我的工具。所以我目前正在努力确保该工具正确运行。

标签: java netbeans javafx memory-leaks profiler


【解决方案1】:

意外高内存使用的一个常见来源是将对象添加到集合中,然后在完成后不删除它们(我看到您发布的图像显示了一个可能是问题的 HashMap)。典型的解决方案是使用一个集合,一旦所有其他对它的引用都消失了,该集合将不会使对象保持活动状态,请参阅WeakHashMap 了解更多信息。

要深入研究这些类型的问题,请进一步捕获 hrpof(您可以使用 VisualVM、JConsole 等),然后在 Eclipse MAT 或类似工具中对其进行分析。

【讨论】:

  • 看到奇怪的是,我已经搜索了我所有的FXML 控制器文件,我还没有使用过HashMaps,所以我什至无法更改我的收藏类型使用WeakHashMap
  • Eclipse MAT 可以告诉您哪些对象消耗的内存最多,Merge Shortest Path To GC Root 会告诉您是什么让它们保持活力。如果 HashMap 成为一个问题,它会告诉你谁拥有它
  • 如果您使用的是 JDK,Java Mission Control 也可以做到这一点。这是一个很棒的教程:javacodegeeks.com/2015/03/…
猜你喜欢
  • 2016-03-28
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2013-03-26
相关资源
最近更新 更多