2012-08-15 52 views
0

我有,我希望留下來爲左右時間長短不一,他們可以被垃圾回收之前的對象長期運行(多天)的應用程序。比方說,有四類:如何分析是哪一代哪些對象?

  1. 壽命很短(< 1S)
  2. 活着的用戶關注(1S < 18H)
  3. 每日數據(〜24小時)
  4. '永恆' 期限(很少,應用程序的生命)

爲了幫助調優,我想找到一種方法來檢查使用Java 6 Hotspot虛擬機檢查實際數據進入終身代的方式。使用jmap生成HPROF文件似乎不包括世代信息。有沒有另外一種獲取這些信息的方法?

回答

0

沒有,有沒有簡單的方法來獲得代信息單獨的對象。事實上,如果你要求「活」的物體,這將觸發一個完整的GC,並將所有的物體放入舊一代(所以現在你知道所有的物體在哪裏,但不是它們在哪裏)

生存完整的GC很可能是在老一代的,所以如果你的系統沒有一個完整的GC每隔5分鐘,任何事情持續時間長於是一樣的。

你能做的最好的事情是儘量減少丟棄的對象(使用內存分析器來幫助)這將改善GC性能和descrease它們出現的頻率。在極端的例子中,你可以使用堆內存,這是難以工作,但使用旁邊沒有堆。如果你有很多GB的數據,尤其有用。

+0

鑑於VisualVM的使用Visual GC插件不顯示的大小事在個別世代,我認爲有可能是另一種方式,沒有這樣的運氣掛鉤? – sharakan 2012-08-16 15:15:04

+0

不是我所知道的。我懷疑,擾亂系統的開銷使得很難有意義。 – 2012-08-17 19:30:28