我使用NetBeans Profiler(實際上是一個嵌入式VisualVM)來監視我的Java應用程序的內存消耗。我使用堆視圖,倖存的一代視圖和內存轉儲來跟蹤內存泄漏。分析內存時使用哪個GC?
堆視圖顯示已使用內存的總數,但由於垃圾收集器管理內存的方式而有點混亂。該圖本質上是鋸齒形的,因此不是特別可讀。有時候,我強迫GC發生,這樣我就可以對實際的內存消耗有更精確的評估。
我想知道:是否有一個更適合內存分析的垃圾回收器,哪個會產生更接近實際內存使用率的堆圖?或者更一般地說,我可以使用哪些JVM設置(-XX
選項或其他)來有效跟蹤內存泄漏?
+1:無論是否「可讀」,鋸齒圖案都是實際發生的內存使用量。 – 2011-03-14 17:51:12
你是對的:我不應該說「真實的內存使用量」,因爲圖表實際上表明瞭這一點。相反,我應該說「圖表如何更接近於倖存的實例使用的內存,而不會受到短期實例的污染」。 – barjak 2011-03-14 18:16:18
爲了捕獲這些細節,你確實需要一個堆轉儲。仔細想想,即使圖表很平滑 - 通過查看這種圖表,您也不會知道實際上有什麼物體在附近。 – 2011-03-14 18:31:52