并发标记扫描(CMS)收集器专为需要较短垃圾收集暂停时间且能够在应用程序运行时与垃圾收集器共享处理器资源的应用程序而设计。
对于任何暂停时间要求较低的应用程序,应考虑使用此收集器。
使用命令行选项启用CMS收集器-XX:+UseConcMarkSweepGC。
与其他可用的收集器类似,CMS收集器是分代的;;因此,小型和主要收集都会发生
CMS收集器尝试通过使用单独的垃圾收集器线程在执行应用程序线程的同时,跟踪可访问的对象来减少由于主要收集而导致的暂停时间。
在每个主要的收集周期中,CMS收集器会在收集开始时暂停所有应用程序线程一段时间,然后再一次暂停到收集的中间。
并发模式失败
CMS收集器使用一个或多个与应用程序线程同时运行的垃圾收集器线程,目标是在完成之前完成终生代的收集。
在正常操作中,CMS收集器在应用程序线程仍在运行时执行大部分跟踪和扫描工作,因此应用程序线程只能看到短暂的暂停。
暂停
CMS收集器在并发收集周期中暂停两次应用程序。第一个暂停是将根目录中可直接访问的对象(例如,来自应用程序线程堆栈和寄存器的对象引用,静态对象等)以及堆中的其他位置(例如,年轻代)标记为暂停。第一次暂停被称为初始标记暂停。第二次暂停在并发跟踪阶段结束时发现,并且在CMS收集器完成对该对象的跟踪之后,由于对象中引用的应用程序线程的更新而发现并发跟踪遗漏的对象。第二次暂停被称为备注暂停。