CMS有两个阶段会Stop-The-World

  • 1.初始标记阶段(单线程)
  • 2.重新标记节点(多线程)

多个应用运行在同一个系统上建议调小GC回收的线程数量

-XX:ParallelGCThreads=<n>

重新标记阶段之前可以通过先进行一次Minor GC,可以减少引用老年代空间的新生代的对象数量,将重新标记阶段的工作量减到最少

-XX:+CMSScavengeBeforeRemark

参考资料

Java 性能调优权威指南