2010-05-11 36 views
0

我有一個應用程序,它在Mac OS X上使用this jdbc-driver將一些數據(80k元組中的大約15mb)寫入SQLite數據庫。這是使用事務完成的,事務處理最大包含大約45k插入到一個表中。當分析應用程序,幾件事情似乎很奇怪:解釋VisualVM概要分析會話的結果

  1. 如果我在暫停使用System.in.read()開始申請權,在處理中分配的內存不斷增長緩慢。這是爲什麼?
  2. 當應用程序運行時,VisualVM監視器中使用的堆空間總是在80mb左右。但是,在分析內存使用情況時,我總共獲得了大約10mb。任何人都可以解釋這種差異?

感謝您的幫助。

回答

0

關於您的第一個問題,您觀察了多長時間段,您發現緩慢的增長。當Java過程中內存使用靜止時,您通常會看到鋸齒模式的發展。你有沒有看到GC在同一時間段發生?如果不是,那麼更多的證據支持這個想法。

對於問題二,如果沒有更多信息,確實很難說。您通常會希望應用程序的行爲因配置文件打開而不同,因爲時間窗口更改,應用程序不得不花費時間報告數據執行其正常工作等。可能是因爲啓用了配置文件時,會分配更多的內存因爲你的代碼現在被檢測到了,並且這觸發了一個GC來降低堆的使用。在關閉分析時,嘗試在應用程序中執行System.gc()並告訴我們您的堆使用情況報告。

+0

無論是否分析,應用程序都會遇到內存不足錯誤,因此我認爲高堆使用率是正確的。 – 2010-05-11 17:03:21

+0

好的,下一步是進行堆轉儲並解釋結果。您可以使用VisualVM或JConsole進行此操作。使用Eclipse MAT或HPjmeter打開生成的堆轉儲文件,並查看保存在內存中的內容。 – 2010-05-11 17:10:20

+0

請回答我的問題在http://stackoverflow.com/questions/20112666/how-to-interpret-profiling-results – J888 2013-11-29 00:52:49

2

內存使用中的拼圖模式是由於通過RMI傳輸的分析結果。這確實是非常令人困惑和惱人的過濾從您的程序的實際內存分配。請參閱VisualVM profiling is polluting results以瞭解如何過濾這些內容:-)

+0

我想你的意思是[「sawtooth,」](http://en.wikipedia.org/wiki /鋸齒波)不是[「拼圖。」](http://i.stack.imgur.com/5tkFs.png) – 2012-04-11 15:26:12

+0

爲什麼是的,是的,我這樣做:-) – parasietje 2012-04-12 08:53:15

+0

請回答我的問題http://stackoverflow.com /問題/ 20112666 /如何判讀的概要分析,結果 – J888 2013-11-29 00:54:22