2017-06-21 147 views
0

關於GarbageCollectorMXBean.html#getCollectionTime()的文檔很少。GarbageCollectorMXBean#getCollectionTime()指示時間JVM是否被*暫停*用於GC?

它說:

返回以毫秒爲單位的近似累積收集經過的時間。如果此收集器的集合已過時間未定義,則此方法返回-1。

Java虛擬機實現可能使用高分辨率計時器來測量已用時間。如果集合流逝時間非常短,即使集合計數已遞增,此方法也可能會返回相同的值。

我想知道的是,這個「累積收集時間」是JVM在for期間暫停的時間(這是一個容易理解的概念),還是它意味着某種模糊的東西。

回答

1

不,這意味着收集垃圾的時間。它沒有告訴任何有關多久(如果有的話,取決於所使用的GC算法)JVM在那段時間內被暫停。

您可以使用該信息來計算平均收集時間,從而讓您瞭解有多少垃圾正在生成。

您可以比較MXBean的值與例如jstat或只是普通的-XX:+PrintGCDetails生成的精確統計數據。

+0

你能指出一個參考(代碼,文檔,JVM上的工作人員)嗎?你怎麼會知道這事? – 0xbe5077ed

+0

停止世界收集是最近GC算法試圖避免的事情。您可以通過運行使用並行gc算法並生成適量垃圾的簡單程序來輕鬆測試它。即使JVM從未停止,您仍然可以看到收集發生。 – Kayaman

+0

但是我如何知道JVM是否暫停或不能在短時間內暫停?我的無知道歉,但我的理解是,即使並行GC算法並行工作(如掃描垃圾),但他們實際上暫停掃描。有改變嗎? – 0xbe5077ed