两个收集器间有连线,表明它们可以搭配使用: Serial/Serial Old、Serial/CMS、 ParNew/Serial Old、ParNew/CMS、 Parallel Scavenge/Serial Old、Parallel Scavenge/Parallel Old、G1; 其中Serial Old作为CMS 出现"Concurrent Mode Failure"失败的后备预案。 (红色虚线)由于维护和兼容性测试的成本,在JDK 8时将Serial+...
含义是使用Serial+Serial Old),与其他垃圾收集器相比,Serial具有简单、高效的特点,对于内存资源受限的环境,它是所有收集器额外内存消耗最小的,所以很实用客户端的虚拟机。
因为CMS采用的是 标记清除的方式,所以内存碎片会比较多,采用标记清除的方式是需要维护一个空闲列表去分配对象 ,一旦内存的连续空间不足以放新产生的对象的时候,CMS会使用Serial Old串行垃圾回收器 清理并且整理老年代垃圾。 Serial Old垃圾回收器是单线程标记整理的垃圾回收器 所以一旦CMS采用了Serial Old方式去整理老年...
年轻代的垃圾回收器 : Serial ParNew Parallel Scavenge 老年代的垃圾回收器 : CMS Serial Old ( MSC ) Parallel Old Serial 垃圾回收器 是 单线程垃圾收集器 , 垃圾回收时 , 需要暂停当前的Java线程 , 进行垃圾回收 , 这样会造成程序卡顿 ; ParNew 垃圾回收器 是 多线程的垃圾收集器 , 是 Serial 垃圾回收...
Concurrent Mode Failure的影响:老年代的垃圾收集器从CMS退化成Serial Old,所有用户线程被暂停,停顿时间变长。解决方案 1)CMS触发太晚 参数-XX:CMSInitiatingOccupancyFraction=N指的是CMS在对内存占用率达到N%时开始GC(因为CMS会存在浮动垃圾,所以需要设置触发垃圾回收的阀值,默认为92%),可适当调小参数-XX:...
因此当老年代内存使用达到一个值之后,CMS收集器就会被激活,进行垃圾回收。这个值在JDK5中默认是68%,在JDK6时默认为92%。预留一部分空间又会出现另一种情况:预留内存如果无法满足用户线程分配新对象,就会出现一次“并发失败”(Concurrent Mode Failure),这时候虚拟机会临时启用Serial Old收集器进行垃圾回收,冻结...
Serial Old 收集器 特点: Serial收集器的老年代版本 单线程收集器 使用标记-整理算法 主要在客户端模式下使用。如果在服务端模式下,它也可能有两种用途: 一种是在JDK 5以及之前的版本中与Parallel Scavenge收集器搭配使用,另外一种就是作为CMS收集器发生失败时的后备预案,在并发收集发生Concurrent Mode Failure时使用...
Serial Old 收集器 特点: Serial收集器的老年代版本 单线程收集器 使用标记-整理算法 主要在客户端模式下使用。如果在服务端模式下,它也可能有两种用途: 一种是在JDK 5以及之前的版本中与Parallel Scavenge收集器搭配使用,另外一种就是作为CMS收集器发生失败时的后备预案,在并发收集发生Concurrent Mode Failure时使用...
Serial |Parallel|ParNew|CMS|G1|ZGC Serial / Serial Old 从单词翻译过来看 serial = 串行,每次它就是一款单线程收集器。 Serial 工作在新生代垃圾回收,Serial Old在老年代进行垃圾回收,Serial Old一般作为CMS 并发收集失败后的备选回收方案。 在垃圾收集器面前,它可算是老前辈了,因为它历史最悠久,同样它和...
当设置的-XX:CMSInitiatingOccupancyFraction 过大时,就可能会出现在垃圾回收过程中,无法分配对象的问题,导致 并发失败 (Concurrent Mode Failure),此时会临时启用Serial Old回收器来重新进行老年代回收,这样会导致停顿时间更长。 总结: CMS回收器只回收老年代,其是以吞吐量为代价换取回收速度 ...