CMS详解
https://www.cnblogs.com/ggjucheng/p/3977612.html
CMS默认不回收Perm, 需要加参数 +CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
gc: cms有个缺点是容易产生内存碎片, 需要设置压缩重排. 老年代太小时并发收集器找不到连续的空间,此时会转成单线程的标记清除
- -XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩。
- -XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩
观察设置前后,yongGC fullGC的时长变化
https://unixboy.iteye.com/blog/174173
GC日志 在线分析工具
各版本默认GC
JDK6 | JDK7 8 | JDK9 10 11 | |
-XX:+UseSerialGC | -XX:+UseParallelGC | -XX:+UseG1GC |
查看方法:java -XX:+PrintFlagsFinal -version | findstr GC
CMS一直没有当作默认GC, 因为少数情况下比ParallelGC还差
使用哪种GC的决定因素:
内存大小 , 如果堆大于6G, 推荐G1和新版本的GC, 如果是小内存,老的算法也许更合适
场景, 计算优先(延时可以很大),还是吞吐优先(低延时), 常见的场景是吞吐,用户不想等个几秒 系统还没反应
微服务时代: Xmx Xms要设置成一样吗 使用稳定的堆, 还是震荡的堆 ?
各有优缺点,
如果机器多, 推荐稳定堆; 如果机器资源紧张, 业务量小可以考虑震荡的堆