CMS和G1的區別
區別一: 使用范圍不一樣
CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用 G1收集器收集范圍是老年代和新生代。不需要結合其他收集器使用
區別二: STW的時間
CMS收集器以最小的停頓時間為目標的收集器。
G1收集器可預測垃圾回收的停頓時間(建立可預測的停頓時間模型)
區別三: 垃圾碎片
CMS收集器是使用“標記-清除”算法進行的垃圾回收,容易產生內存碎片
G1收集器使用的是“標記-整理”算法,進行了空間整合,降低了內存空間碎片。
區別四: 垃圾回收的過程不一樣
CMS:初始標記、并發標記、重新標記、并發清理
G1:初始標記、并發標記、最終標記、篩選回收
初始標記階段:標記GC Roots 可以直接關聯的對象,會讓線程全部停止,也就是 Stop the World 狀態
并發標記階段:對所有的對象進行追蹤,這個階段最耗費時。但這個階段是和系統并發運行的,所以不會對系統運行造成影響
重新標記階段:由于第二階段是并發執行的,一邊標記垃圾對象,一邊創建新對象,老對象會變成垃圾對象。 所以第三階段也會進入 Stop the World 狀態,并且重新標記,標記的是第二階段中變動過的少數對象,所以運行速度很快
并發清理階段: 這個階段也是會耗費很多時間,但由于是并發運行的,所以對系統不會造成很大的影響
-----------------
篩選回收:對每個Region的回收成本進行排序,按照用戶自定義的回收時間來制定回收計劃