2011-08-08 68 views
1

我的程序有問題(運行在Glassfish上的JSF)。它正在處理大量數據(並使用休眠將其插入到數據庫中)。問題是,大約2小時的工作後,它會減速。我沒有得到任何異常(特別是沒有OutOfMemory)。它可能是內存泄漏嗎?我用Eclipse Memory Analyzer檢查了堆轉儲,並且存在一些HashMap問題。我修復了它可能的地方,現在該工具不顯示這個問題。但是我的應用程序仍然無法正常工作。內存泄漏沒有OutOfMemory異常?

+0

你可以嘗試使用visualvm連接到虛擬機,並看看虛擬機的狀態,它可能會給一些洞察力... –

+0

相關/ dupe:http://stackoverflow.com/questions/40119/how -to-發現-A-Java的內存泄漏 – amit

回答

3

這聽起來像你的問題不是一個傳統的內存泄漏的。

如果我猜測,我會說你的數據結構設計不好,緩存效率低下,或者是併發瓶頸。

您應該關注性能分析以查看時間正在發生的位置並查找鎖爭用的跡象。

0

有一個機會,你有某種內存泄漏產生大量的臨時對象,所以經過一段相當長的時間垃圾收集器會殺死你的性能。如果是這樣的話,你可以玩-Xmx選項:堆的大小越小,你的應用程序應該越早放慢速度,更大的堆應該表現出反對效果。

的影響也可以通過內部的不斷增長造成的數據結構。數據結構上的操作總是有時間複雜性(「大O型符號」),如果複雜性是多態性的或更糟的,這樣的操作也會導致性能下降。查看應用程序中隨時間增長的那些集合,然後仔細檢查並選擇最佳集合類型。