2016-03-22 74 views
2

我似乎在我的javaFX应用程序中有memory leak问题,我一直在使用net beans profiler工具来帮助我找到泄漏的来源,但由于我不确定究竟是什么,我正在做。应用程序中的内存泄漏

现在我已经看过教程,他们说要监视一个对象的surviving generations,但我仍然不确定如何使用这些信息。我在监视我的应用程序时截取了最高的surviving generation对象。

有人可以向我解释我应该如何处理这些对象,或者他们实际上是否导致memory leak

enter image description here

+1

看看这个:http://stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java这不是你的问题的答案,但有一些很好的例子,如何创建内存在Java中泄漏。这可能会帮助您找到问题(如果根本不存在,很难说不知道程序应该执行什么操作;)) – whatTheFox

+0

@noobCoder您是否可以使用Eclipse MAT找到问题? –

+0

还没有,但它指出了我在正确的方向。我现在暂时把它放在了后面,因为我觉得我可以沉浸了很多时间去发现问题,目前我根本没有这个问题,因为我必须在接下来的日子里展示我的工具。所以我现在正在努力确保工具正确运行。 – noobCoder

回答

1

意外的高内存使用率的一个常见原因是将对象添加到集合,然后不删除它们,当你完成(我看您发布的图片显示,可能是一个问题,一个HashMap)。典型的解决方案是使用一个集合,一旦所有其他引用都不存在,它就不会保留对象,请参阅WeakHashMap了解更多信息。

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

+0

看到奇怪的是,我已经搜索了我所有的'FXML'控制器文件,并且我没有在任何时候使用'HashMaps',所以我甚至不能改变我使用'WeakHashMap'的集合类型。 – noobCoder

+0

Eclipse MAT可以告诉你哪些对象消耗的内存最多,合并GC Root最短路径将告诉你什么使它们活着。如果HashMap证明是一个会告诉你谁拥有它的问题 –

+0

如果您使用的是JDK,Java Mission Control也可以这样做。这是一个很好的教程:https://www.javacodegeeks.com/2015/03/oracle-java-mission-control-the-ultimate-guide.html – whatTheFox