我不完全確定這一點,但我認爲,控制所有內存池的垃圾回收器(至少一個用於老一代)是用於主要gc的一個。例如:我有JVM與這些2個收集器運行:
- PS MarkSweep
- MemoryPoolNames:PS伊甸空間,PS倖存者空間,PS舊根,PS彼爾姆根
- CollectionCount:68
- PS掃氣
- MemoryPoolNames:PS伊甸園空間,PS生存空間
- CollectionCount:2690
考慮到這一點,我會說,PS掃氣用於較小的GC和PS MarkSweep重大GC。
UPDATE(基於@ajeanson評論,感謝您的反饋BTW):
實際上,我擺在那裏的例子來自於我所用的JVM的MXBean的公開的信息中取得。如您所述,這些是GC算法,GC的MXBean所使用的名稱是基於GC正在使用的算法。我一直在尋找更多關於這方面的信息;本文http://download.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html中,讀取以下:
雖然Java HotSpot VM定義了兩個 一代:年輕一代 (有時稱爲「託兒所」)和 老一代。年輕的 一代包括一個「伊甸園空間」 和兩個「倖存者空間」。 VM 最初將所有對象分配給Eden空間,並且大多數對象在那裏死亡 。當它執行次要GC時,VM將任何剩餘的對象 從Eden空間移動到 倖存空間之一。虛擬機移動對象 ,該對象在活着的 空間中足夠長的時間移動到 老一代的「終身」空間。當終身 代填滿時,有一個完整的GC,通常要慢得多,因爲它涉及所有活動對象。 永久代持有虛擬機 本身的所有反射數據,如類和方法 對象。
考慮看看上的MXBean的collectionCount財產,在我的「PS MarkSweep」收集器的情況下(在一個管理的老一代池),集數,似乎當我得到一個完整的GC只增加在詳細輸出中。我可能是錯的,也許在某些情況下,這個收集器也會執行較小的GC,但我需要運行更多的測試才能完全確定這一點。 請讓我知道是否有人發現了別的東西,或者您對這個問題有更多具體的信息,因爲我對它很感興趣。
您可能會發現gc之前/之後的舊版使用情況只會在完整gc時下降。如果這是你的情況,那麼這將足以識別完整的GC。 – Ron 2011-02-02 16:42:31
[這可能會給你一些見解](https://gist.github.com/khotyn/1520947)在你測試你的代碼的JVM上啓用了哪種GC類型 – KJ50 2014-08-25 23:37:06