2013-05-11 70 views
0

我想在應用程序中發現內存泄漏。這是一個在GlassFish 2上運行的Java EE應用程序,帶有Hibernate和Lucene。glassfish使用的內存vs堆轉儲

系統監視器告訴我GlassFish使用的內存大於4GB。但是當我在jprofiler中打開一個堆轉儲時,它告訴我只有大約600mb的分配空間。

你認爲我在做什麼是錯的?

你認爲有可能剩下的應該是垃圾收集的對象,並且gc有什麼問題嗎?我們處理大量數據,所以我確信在很短的時間內創建了很多對象。

+0

您可以使用所使用的內存[JVisualVM(http://visualvm.java.net/),看看內存究竟是怎麼分配(即當前堆大小vs分配的堆大小) – Cascader 2013-05-11 08:35:08

+0

生產時會出現問題。我無法打開jmx和rmi的端口。所以我必須使用安裝在服務器上的工具,並且沒有X – 2013-05-12 21:10:54

回答

0

JProfiler提到的600MB是java的堆,它將根據需要擴展到最大堆空間。
通過系統監控中提到的4GB是所有的應用程序(JVM,服務器等)

+0

不,它不是。在開始時,它要少得多。 – 2013-05-12 11:52:56

+0

@piotrek:不知道你的意思 – Jim 2013-05-12 12:01:40

+0

我的意思是,當應用程序啓動它使用較少的內存。在這段時間內它正在增長。 – 2013-05-12 21:08:32