1. 程式人生 > >查看JVM使用的默認的垃圾收集器

查看JVM使用的默認的垃圾收集器

一個 組合 ref 處理 理解 老年代 開啟 http TP

一、查看步驟

cmd執行命令:

java -XX:+PrintCommandLineFlags -version

輸出如下(舉例):

技術分享圖片

針對上述的-XX:UseParallelGC,這邊我們引用《深入理解Java虛擬機:JVM高級特性與最佳實踐》的介紹:

技術分享圖片

也就是說,打開此開關,使用的垃圾收集器是:新生代(Parallel Scavenge),老年代(Ps MarkSweep)組合。

二、驗證下,是不是那麽回事吧

我用ide起了一個程序,然後在main中進行長時間睡眠。啟動時,設置其VM 參數如下:

技術分享圖片

然後用Jconsole連接該程序,切換到VM概要這個tab,註意下圖紅圈圈出來的地方:

技術分享圖片

結合第一步中的資料,很容易驗證,使用-XX:UseParallelGC的情況下,使用的垃圾收集器為:新生代(Ps Scanvenge),老年代(Ps MarkSweep,與Serial Old)。

三、Ps Scanvenge的簡要介紹

技術分享圖片

技術分享圖片

技術分享圖片

這邊附上我的簡單理解:該垃圾收集器適用於新生代,采用標記復制算法、多線程模型進行垃圾收集。

與其他新生代垃圾收集器的差別是,它更關註於吞吐量,而不是停頓時間。一般來說,需要與用戶交互的

程序更關註較短的停頓時間,而如果是需要達成盡量大的吞吐量的話,則該處理器會更加適合。

其通過-XX:UseAdaptiveSizePolicy參數,可以開啟其自動調節功能,適用於對垃圾收集器的調優不太了解的

用戶。

四、Serial Old的簡要介紹

技術分享圖片

我的理解:和其他老年代垃圾處理器一樣,都是使用的標記整理算法,(畢竟沒有靠山可以擔保,沒法復制,只能自己整理了,哎),

采用單線程處理模型。

五、Serial Old和Ps MarkSweep的區別

技術分享圖片

如上圖所示,也說了,在實際中,(正如第二節的截圖所示),實際應用中,大多使用的就是Ps MarkSweep。

Ps MarkSweep是以Serial Old為模板設計的,按照我們程序員的說法,估計是拷貝過來,改吧改吧出來的。

所以差不太多。

查看JVM使用的默認的垃圾收集器