2016-03-22 79 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