做得好的营销网站,阿里云备案网站名称,电商直播培训学校学费多少,有哪些网站可以做h5相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的#xff0c;从上图可以看到有连线的的垃圾收集器是可以组合使用#xff0c;是年轻代老年代… 相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的从上图可以看到有连线的的垃圾收集器是可以组合使用是年轻代老年代。为什么会出现这么多的垃圾收集器因为直到现在也没有最好的垃圾收集器出现更没有万能的垃圾收集器只能按照使用场景来选择适合的垃圾收集器。如果存在完美的垃圾收集器那到JAVA虚拟机就不会实现这么多不同的垃圾收集器。
Serial收集器
jvm参数 -XX:UseSerialGC -XX:UseSerialOldGC
Serial(串行)收集器是最早的垃圾收集器。看这个名字翻译成中文就是“单线程”收集器了。通过单线程去完成垃圾收集器更重要在收集过程必须暂停其它所有的工作线程(Stop The World),直至它收集结束。 新生代采用“复制”算法老年代采用标记-整理算法。 Serial收集器的优点简单高效与其它收集器的单线程相比。Serial收集器由于没有线程交互的开销自然可以获得很高的单线程收集效率。
Serial Old收集器是Serial收集器的对应的老年代版本这也是一个单线程收集器。它有二个用途一种用途是在JDK1.5以及以前的版本中与Parallel Scavenge收集器配合使用另外一种用途是做为CMS收集器的后备方案。
Parallel Scavenge收集器
jvm参数配置-XX:UseParallelGC(年轻代),-XX:UseParallelOldGC(老年代))
Parallel Scavenge收集器是Serial收集器的多线程版本除了使用多线程进行垃圾收集外其余行为控制参数、收集算法、回收策略等和Serial收集器类似。默认的收集线程数跟CPU核数相同当然也可以用参数(-XX:ParallelGCThreads)指定收集的线程数但是一般不推荐修改。 Parallel Old收集器是Parallel Scavenge收集器的老年代版本。使用多线程和标记-整理算法。在注意吞吐量以及CPU资源的场合都可以优先考虑Parallel Scavenge收集器和Parallel Old收集器.(JDK8默认的新生代和老年代收集器)。
ParNew收集器 jvm参数设置-XX:UseParNewGC
ParNew收集器其实跟Parallel收集器很类似区别主要在于它可以和CMS收集器配置使用。新生代采用“复制”算法。 在大部分场景下ParNew是虚拟机的首要选择除了Serial收集器外只有它与CMS收集器配合工作。
CMS收集器
jvm参数配置-XX:UseConcMarkSwwepGC(old)
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。它是HotSpot虚拟机推出的第一款真正意义上的并发收集器经第一次实现了让垃圾收集线程与用户线程基本上同时工作。
CMS收集器是一种“标记-清除”算法实现。分五个步骤
初始标记暂停所有的其它线程(STW)并记录下gc roots直接能引用的对象速度很快。
并发标记并发标记阶段从GC Roots的直接关联对象开始遍历整个对象图的过程这个过程耗时较长但不需要停顿用户线程可以与垃圾收集线程一起并发运行。因为用户程序继续运行可能会导致已经标记过的对象状态发生改变。
重新标记修正并发标记阶段因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录。
并发清理开启用户线程同时GC线程开始对未标记的区域做清扫。这个阶段如果有新增对象会被标记为黑色不做处理。
并发重置重置本次GC过程中的标记数据 优点并发收集低停顿
缺点
对cpu资源敏感无法处理浮动垃圾在并发标记和清理阶段又产生垃圾这种浮动垃圾只能等到下一次再清理了使用“标记-清除”算法导致在收集完成时会产生大量空间碎片执行过程中不确定性会存在上次垃圾回收还没有回收完然后垃圾回收又被触姝情况特别是并发标记和并发清理阶段会出现同时在回收系统同时也在运行有可能还没有回收完就再次触发full gc,也就是concurrent mode failure此时会进行stop the world 用Serial old垃圾收集器来回收