為什麼CMS要為老年代預留空間?
CMS在最後一個併發清理階段才會真正的開始清理垃圾物件,不過這些垃圾物件都是在回收之前標記好的垃圾物件,該階段也是使用者執行緒和垃圾回收執行緒併發執行的,所以在這個階段,系統也是在一直執行的,此時很有可能會有物件需要進入老年代,所以一邊的CMS在回收垃圾物件,另一邊又不斷放入物件,如果記憶體不夠了,就會觸發Concurrent Mode Failure,代表著併發垃圾回收失敗了,接著就會自動切換成“Serial Old”垃圾回收器替代CMS,強行把系統程式“Stop the World”,重新進行長時間的GC Roots追蹤,標記出全部的垃圾物件,直到全部垃圾物件被回收完成後再恢復系統執行,相對來說,“Serial Old”垃圾回收器的耗時是比較長的,所以要儘量避免出現“Serial Old”垃圾回收器替代CMS的情況,也就是要儘量避免出現Concurrent Mode Failure問題,那麼就要保證在CMS併發清理階段,預留足夠的空間讓一些物件可以進入老年代。
該預留空間可以通過引數-XX:+CMSInitiatingOccupancyFraction引數來設定,JDK1.6裡預設值是92%,表示在老年代空間被使用92%後就自動觸發CMS垃圾回收,剩下的8%就是預留空間,方便在併發回收期間,讓一些物件順利進入老年代,不會觸發Concurrent Mode Failure問題。
相關文章
- 老闆:你為什麼要選擇 Vue?Vue
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 程式碼之間為什麼要加空格?
- Win10 19H1為什麼預留空間7GB硬碟 Win10預留7GB硬碟空間的取消方法Win10硬碟
- 為什麼要code reviewView
- 為什麼要寫作
- Java 18為什麼要指定UTF-8為預設字符集Java
- 到底cms企業建站系統是什麼?為什麼要做cms系統?
- 為什麼運維要學Python?它們之間有什麼聯絡?運維Python
- 為什麼要學習Netty?Netty
- 為什麼要學習 RustRust
- 為什麼要學習 Julia
- 為什麼要指令重排序?排序
- 為什麼要財務自由
- 為什麼要學習 Vim?
- Python是什麼?為什麼要掌握python?Python
- 老闆:用float儲存金額為什麼要扣我工資
- 帝國CMS為什麼驗證碼均顯示為“ecms”?
- 為什麼想成為 Geeker 的人要學習 JSJS
- 為什麼要學習Python?因為能「為所欲為」啊……Python
- 為什麼 JavaScript 的 this 要這麼用?JavaScript
- 帝國cms為什麼釋出時間比實際時間相差8個小時?
- 我為什麼要學技術
- 為什麼要“東數西算”?
- 為什麼要分庫分表?
- 為什麼還要記密碼密碼
- redis為什麼要提供pipeline功能Redis
- 前端為什麼要工程化?前端
- 為什麼要閱讀原始碼原始碼
- 序 為什麼要建立部落格
- [譯]為什麼要寫 super(props)
- 為什麼要貢獻開源
- 為什麼要加EventQueue.invokeLater
- 為什麼要特徵標準化特徵
- 為什麼要成為「無敵」程式設計師?程式設計師
- 道術之間:人文社科教師為什麼要學習AI?AI
- Python到底是什麼?為什麼要學Python?Python
- Python優勢是什麼?為什麼要學習?Python