查看JVM使用的默認的垃圾收集器
一、查看步驟
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使用的默認的垃圾收集器