3 垃圾收集器

    xiaoxiao2023-11-07  160

    1 Serial收集器

    作用域:新生代

    采用的收集算法:新生代Serial采用复制算法,老年代SerialOld采用标记整理

    特点:单线程收集器,在进行收集的时候,需要暂停其他所有工作线程(Stop the world),简单高效,对于桌面应用场景(新生代使用内存不大)是很好的选择

    缺点:在用户不可见的情况下将用户的工作线程都停掉,对其他应用造成影响

     

    2 ParNew收集器

    作用域:新生代

    算法:新生代复制算法,老年代复制整理算法

    特点:是Serial的多线程版本,其余跟Serial一样,是设置-XX:+UserConcMarksSweepGC参数默认的收集器

    通过设置jvm参数为-XX:+UserParNewGC来强制使用

     

    只有以上两种能与后面出现的并发收集器(CMS)同时工作

     

    3 Parallel Scavenge收集器

    作用域:新生代

    采用的收集算法:复制算法

    特点:多线程收集,关注点跟其他不同,他的目标是得到一个可以控制的吞吐量,即高效利用CPU时间,而其他则是尽可能缩短用户线程的停顿时间,即有良好的相应速度提升用户体验

    ps:吞吐量是指运行用户代码时间/(运行用户代码时间和垃圾收集时间)

     

    4 Serial Old收集器 

    作用域:老年代

    算法:标记整理算法

    特点:两大用途,一是jdk1.5之前和与ParallelScavenge一起用,另外就是作为CMS的后备方案

     

    5 Parallel Old收集器

    作用域:老年代

    特点:注重吞吐量和CPU资源

     

    6 CMS收集器(ConcurrentMarkSweep)

    作用域:老年代

    算法:标记清除算法

    特点:以获取最短回收停顿时间为目标

    四个过程:初始标记(标记GCroot能直接关联到的对象,GC管理的主要区域是堆,所以方法区,栈,本地方法区这些不被GC管理的区域的对象一般用于做GCRoots),

    并发标记(GC root Tracing),重新标记(修正因为用户操作而标记有变动的对象的标记记录),并发清除,收集过程可以和用户线程并发执行

    缺点:-对CPU资源敏感,所以在跟用户进程并发执行的过程中会占用CPU资源导致应用程序变慢,吞吐量降低

    -无法处理浮动的垃圾,即在运行过程中产生的垃圾(收集过程中用户进程没有停止,所以垃圾还在产生)

    -标记清除,会造成空间碎片化,在大的对象产生时候内存分配会遇到麻烦

     

    7 G1收集器

    作用域:

    算法:整体标记整理局部复制算法

    特点:四大特点:

    1,并行与并发,G1能利用多CPU多核心的硬件优势,来缩短STW的时间

    2,分代收集

    3,空间整合,上面所说的CMS的缺点就是空间碎片化,而G1采用整体标记整理局部复制算法的方法来使得空间的碎片化情况得到解决

    4,可预测的停顿,建立了可以预测的停顿时间的模型,能让使用者明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒

    最新回复(0)