主要了列了下CMS相關的配置項,和配置項相關含義,具體CMS收集器工作機制,可以參考下其他資料;GC策略的選擇需要根據具體的場景去定制,這里只是拋磚引玉
- 整體配置(默認實例規格是8c16g,線程數、內存大小需要根據實例規格去設置)
-Xmn1024m -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=4 -XX:ParallelGCThreads=8 -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3 -XX:+CMSClassUnloadingEnabled
- 配置項詳解
UseConcMarkSweepGC: 啟用CMS收集器
CMSParallelRemarkEnabled:開啟並行重新標記
ParallelCMSThreads: 老年代並行收集線程數(默認 ParallelCMSThreads = (ParallelGCThreads + 3) / 4)
ParallelGCThreads:年輕代並行收集線程數(ParallelGCThreads = (ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8))
CMSInitiatingOccupancyFraction:老年代觸發FullGC的內存使用率
UseCMSInitiatingOccupancyOnly:始終使用設定的閾值觸發CMS收集
UseCMSCompactAtFullCollection:觸發CMSFullGC后執行碎片整理
CMSFullGCsBeforeCompaction:設置執行n次FullGC后觸發碎片整理
CMSClassUnloadingEnabled:開啟CMS回收Pmer區
(ps:jdk7及以下ParallelCMSThreads > ParallelGCThreads 會導致jvm崩潰 https://bugs.openjdk.java.net/browse/JDK-8020236)
(ps:jvm內存設置
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmx3550m:設置JVM最大可用內存為3550M。
-Xms3550m:設置JVM促使內存為3550m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存。
-Xmn2g:設置年輕代大小為2G。整個JVM內存大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。
-Xss128k:設置每個線程的堆棧大小。JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。
)