簡體   English   中英

我如何分析哪個對象屬於哪一代?

[英]How can I analyze what objects are in which generation?

我有一個長時間運行(多天)的應用程序,希望這些對象在可以被垃圾回收之前會保留不同的時間。 假設有四個類別:

  1. 壽命很短(<1s)
  2. 在用戶注意的時間內保持活動狀態(1s <18h)
  3. 每日數據(約24小時)
  4. “永恆”(很少,應用程序的生命周期)

為了幫助進行調優,我想找到一種方法,使用Java 6 Hotspot VM來檢查將哪些實際數據輸入到終身代中。 使用jmap生成HPROF文件似乎不包含世代信息。 還有其他獲取此信息的方法嗎?

不,沒有簡單的方法來獲取單個對象的生成信息。 事實上,如果你問“活”的對象,這將觸發一個完整的GC和所有對象放入老一代(所以現在你知道所有的對象,但它們不都是在那里)

其渡過了完整GC的對象很可能是在老一代的,所以如果你的系統沒有一個完整的GC每隔5分鍾,任何事情持續時間長於是一樣的。

最好的辦法是最大程度地減少丟棄的對象(使用內存分析器幫助),這將提高GC性能並減少它們發生的頻率。 在極端的示例中,您可以使用難以使用的堆外內存,但幾乎沒有堆使用。 如果您有許多GB數據,則特別有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM