這篇文章帶給大家的內容是關於java中CMS回收器的簡單介紹(圖文),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
它使用的是標記清除演算法,同時又是一個使用多執行緒並行回收的垃圾回收器。
CMS工作時主要步驟有初始標記、並發標記、預先清理、重新標記、並發清除和並發重置。其中初始標記和重新標記是獨佔系統資源的,而預先清理、並發標記、並發清除和並發重置是可以和使用者執行緒一起執行的。因此它可以在應用程式運行過程中進行垃圾回收。
根據標記清除演算法,初始標記、並發標記和重新標記都是為了標記出需要回收的物件。並發清理則是在標記完成後,正是回收垃圾物件。並發重置是指在垃圾回收完成後,重新初始化CMS資料結構和數據,為下一次垃圾回收做好準備。
在整個CMS回收過程中,預設情況下,在並發標記之後,會有一個預先清理的操作(也可以設定參數-XX:CMSPrecleaningEnabled,不進行預清理)。預清理是並發的,除了為正式清理做準備和檢查以外,預清理還會嘗試控制一次停頓時間。由於重新標記是獨佔CPU的,如果新生代GC發生後立即觸發一次重新標記,那麼一次停頓時間可能很長。為了避免這種情況,預先清理時,會可以等待一次新生代GC的發生,然後根據歷史表現資料預測新生代GC可能發生的時間,然後在當前時間和預測時間的中間時刻,進行重新標記。這樣,最大程度上避免新生代GC和重新標記重合,盡可能減少一次停頓時間。
-XX: UseConcMarkSweepGC啟用CMS回收器
##-XX:ConcGCThreads 設定並發線程數量#-XX:CMSInitiatingOccupancyFraction 設定當老年代使用率達到N時,執行一次CMS回收。 -XX: UseCMSCompactAtFullCollection CMS在垃圾收集完成後,進行一次碎片整理。 -XX:CMSFullGCsBeforeCompaction 設定當進行N次CMS回收後進行一次記憶體壓縮。 -XX: CMSClassUnloadingEnabled 使用CMS機制回收Perm區Class資料以上是java中CMS回收器的簡單介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!