CMS GC:CMS 废弃了,该怎么办呢?
點擊上方?好好學java?,選擇?星標?公眾號
重磅資訊、干貨,第一時間送達 今日推薦:終于放棄了單調的swagger-ui了,選擇了這款神器—knife4j個人原創100W+訪問量博客:點擊前往,查看更多 轉自:滌生的博客 鏈接:https://dzone.com/articles/cms-deprecated-next-steps在 JDK 9 中 CMS GC 被廢棄后,現有應用程序的最佳處理方法是什么?
流行的 CMS( Concurrent Mark Sweep) GC 算法在 JDK 9 中被廢棄了。根據 JEP-291 中的說明,為了減輕 GC 代碼的維護負擔以及加速新功能開發,決定在 JDK9 中廢棄CMS GC。
因此,從 Java 9 開始,如果您使用 -XX:+UseConcMarkSweepGC(激活 CMS GC 算法的參數)參數啟動應用程序,則會在下面顯示警告消息:
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.為什么 CMS GC 會被廢棄?
大家都知道輕裝上陣,才能加速前行。CMS GC 也是如此。CMS 是一種高度可配置的復雜算法,因此給 JDK 中的 GC代碼庫帶來了很多復雜性。只有 JDK 開發團隊簡化了 GC 代碼庫,他們才能在 GC 領域加速和創新。下表總結了可以傳遞給每個 GC 算法的 JVM 參數的數量:
JVM 大約有 50 個通用的適合所有所有 GC 算法的參數,除了這 50 個參數之外,僅對于 CMS,您還可以傳遞 72 個額外的參數。如上表所示,此參數比其他任何 GC 算法都要多得多。因此,可想而知,JDK 團隊支持所有這些參數所需的編碼復雜性。
如果使用了 CMS,后面該怎么辦呢?
就目前來看,其實無非就三種選項:
切換到 G1 GC 算法
切換到 Z GC 算法(JDK 11、12 中的早期版本)
繼續使用 CMS
接下來,我們來分析下每個選項。
(1)切換到 G1 GC 算法
自 Java 9 以來,G1 GC 已成為默認的 GC 算法。因此,可以考慮將應用程序的 GC 算法移至 G1。它可能會比 CMS GC 算法有更好的性能表現。調參相對較少,因此調整起來容易得多。此外,它還提供了用于從內存中消除重復的字符串的參數選項。如果可以消除重復的字符串,可以減少總體內存占用也是極好的。
(2)切換到 Z GC 算法
Z GC 是一種可擴展的低延遲垃圾回收器。其目標是使 GC 暫停時間小于 10ms。Java 11 和 12 中提供了對 Z GC 算法的早期版本。因此,如果你的應用程序在 Java 11 或 12 上運行,則可以考慮升級到 Z GC 算法。我們對 Z GC 的做了初步實驗,都顯示了極好的結果。
(3)繼續使用CMS
我們發現,對于某些應用程序經過一些參數優化,CMS GC 可以提供 G1 GC 無法提供的出色結果。因此,如果您已經研究過上面兩個選項,并且確信只有 CMS GC 算法就是適合你的應用程序,那么可以考慮繼續使用 CMS 算法來運行。在 OpenJDK JDK9-dev 郵件列表中,甚至還有繼續讓 CMS 保持可用狀態 的爭論。根據我個人的經驗,在 Java 1.1 中已廢棄的功能和 API 在 Java 12 中仍然還是存在的(即使 20 年之后)。所有已棄用的 API 和功能似乎都可以保留(并且永遠不會消失)。因此,繼續在使用 CMS GC 也是一種選擇。當然,這完全按照你的需要。
結論
請注意,每個應用程序都是唯一且不同的。因此,不要被在互聯網上看到的有關 GC 調優(包括本文)的文章所迷惑。當你測試新的 GC 參數配置時,你需要進行徹底的測試,可以看看基準性能特征,然后再做決定。
原文:https://dzone.com/articles/cms-deprecated-next-steps
最后,再附上我歷時三個月總結的?Java 面試 + Java 后端技術學習指南,這是本人這幾年及春招的總結,目前,已經拿到了大廠offer,拿去不謝!
下載方式
1.?首先掃描下方二維碼
2.?后臺回復「Java面試」即可獲取
總結
以上是生活随笔為你收集整理的CMS GC:CMS 废弃了,该怎么办呢?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 注意了,Fastjson 最新高危漏洞来
- 下一篇: 阿里推荐的Redis使用规范,Redis