Java 应用程序中的内存泄漏

Java 应用程序中的内存泄漏,java,netbeans,javafx,memory-leaks,profiler,Java,Netbeans,Javafx,Memory Leaks,Profiler,我的javaFX应用程序中似乎存在memory leak问题,我一直在使用netbeans探查器工具帮助我找到泄漏的来源,但我遇到了一堵墙,因为我不确定自己到底在做什么 现在我看了一些教程,他们说要监控对象的幸存世代,但我仍然不确定如何使用这些信息。我在监视我的应用程序时,拍摄了幸存的一代最高对象的屏幕截图 有人能给我解释一下我应该对这些对象做什么,或者它们是否真的导致了内存泄漏 意外高内存使用率的一个常见原因是向集合中添加对象,然后在完成后不删除它们(我看到您发布的图像显示了可能存在问题的哈希

我的
javaFX
应用程序中似乎存在
memory leak
问题,我一直在使用netbeans探查器工具帮助我找到泄漏的来源,但我遇到了一堵墙,因为我不确定自己到底在做什么

现在我看了一些教程,他们说要监控对象的
幸存世代
,但我仍然不确定如何使用这些信息。我在监视我的应用程序时,拍摄了幸存的一代最高
对象的屏幕截图

有人能给我解释一下我应该对这些对象做什么,或者它们是否真的导致了
内存泄漏


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


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

看,奇怪的是,我已经搜索了我所有的
FXML
控制器文件,但在任何时候都没有使用
HashMaps
,因此我甚至无法将我使用的集合类型更改为
WeakHashMap
。Eclipse MAT可以告诉您哪些对象消耗的内存最多,而将最短路径合并到GC根目录将告诉您是什么让它们保持活动。如果HashMap出现了一个问题,它会告诉您谁拥有ITI,如果您使用的是JDK,Java任务控制也可以这样做。这里有一个很好的教程:看看这个:这不是你问题的答案,但是有一些关于如何在Java中创建内存泄漏的好例子。这可能有助于您定位问题(如果存在问题的话。在不知道您的程序应该做什么的情况下很难说;)@noobCoder您是否能够使用Eclipse MAT找到问题?还没有,但它为我指明了正确的方向。我现在暂时把它放在次要位置,因为我觉得我可以花很多时间去发现这个问题,而我现在根本没有这个问题,因为我必须在未来几天展示我的工具。因此,我目前正在努力确保该工具正确运行。