2010-12-04 14 views
7

我想跟蹤在GC中花了多少時間以及已經收集了多少內存,但不是通過分析GC日誌(即分析我從-XX獲得的內容:+ PrintGCWhatever)。JVM的GC事件的程序化通知

我發現我可以使用Sun公司的ManagementFactory獲得GarbageCollectorMXBean,可以給我一些含GCInfo對象存儲的信息,但我不保證我可以通過這意味着收集所有 GC。

有沒有人知道在代碼中這樣做的方法?

回答

4

GarbageCollectorMXBean是我在Sun JVM上能找到的最好的。根據我的經驗,它實際上非常接近你所要求的。

我想你可以有一個專門的線程,不時醒來得到GC統計數據。這會在收集統計數據時增加一些確定性。

+0

這就是我發現自己。但我不確定GCMXbean的行爲。 getGCInfo()文檔告訴它「返回最近的GCInfo」,但不是它返回* all * GCInfo。這可能是這種情況,在嘗試自己弄清楚之前,我會想知道是否有人知道答案。 – insitu 2010-12-04 09:50:54

+1

順便說一句,我發現這個鏈接http://robertmaldon.blogspot.com/2007/09/more-human-friendly-java-gc-timestamps.html非常接近我正在尋找,但不完全。 – insitu 2010-12-04 09:52:54

0

鑑於獲得這些信息的工具種類繁多,您最好使用這些工具來分析GC行爲並對其進行優化。例如使用內存分析器。

您遇到的問題是,信息不是非常有用,除非它指向問題的解決方案。 (然後你可以修復)