垃圾收集器GC

Posted 2019wxw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了垃圾收集器GC相关的知识,希望对你有一定的参考价值。

(1)DefNew(串行)收集器

     Serial(串行)垃圾收集器是最基本、发展历史最悠久的收集器;JDK1.3.1前是HotSpot新生代收集的唯一选择;

   特点:

      (1) 针对新生代采用复制算法,单线程收集器,进行垃圾收集时,必须暂停所有工作线程,直到工作完成。即会:Stop the World

技术图片

 

        (2)应用场景:

       依然是HotSpot在Client模式下默认的新生代收集器;      

       也有优于其他收集器的地方:
            简单高效(与其他收集器的单线程相比);
            对于限定单个CPU的环境来说,Serial收集器没有线程交互(切换)开销,可以获得最高的单线程收集效率;
            在用户的桌面应用场景中,可用内存一般不大(几十M至一两百M),可以在较短时间内完成垃圾收集(几十MS至一百多MS),只要不频繁发生,这是可以接受的
       3、设置参数
               "-XX:+UseSerialGC":添加该参数来显式的使用串行垃圾收集器;
      4、Stop TheWorld说明
          JVM在后台自动发起和自动完成的,在用户不可见的情况下,把用户正常的工作线程全部停掉,即GC停顿;
          会带给用户不良的体验;
          从JDK1.3到现在,从Serial收集器-》Parallel收集器-》CMS-》G1,用户线程停顿时间不断缩短,但仍然无法完全消除;

(2)ParNew(并行)收集器

一句话:使用多线程进行垃圾回收,在线程收集时,会Stop-The-World暂停其他所有工作线程直到它收集结束。

  ParNew/Serial Old组合收集器运行示意图如下:

 

 技术图片

 

1,ParNew收集器其实就是Serial收集器新生代的并行多线程版本。最常见的应用场景是配合老年代的CMS GC工作,其余的行为和Serial收集器完全一样,

ParNew垃圾收集器在垃圾收集过程中同样也要暂停所有其他工作线程。他是很多java虚拟机运行在Server模式下新生代的默认垃圾收集器。

 

2,常用对应的JVM参数:-XX:+UseParNewGC  启用ParNew收集器,只影响新生代的收集,不影响老年代,

   开启参数后,会使用:ParNew(Young区用)+Serial Old的收集组合,新生代使用复制算法,老年代使用标记-整理算法。

配置参数:   -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:+UseParNewGC (ParNew+Tenured)

参考博客:Serial收集器和ParNew收集器

                  github的Demo代码地址

 

以上是关于垃圾收集器GC的主要内容,如果未能解决你的问题,请参考以下文章

Java虚拟机9:垃圾收集(GC)-4(垃圾收集器)

fortran 有垃圾收集器(gc)吗?

03JVM调优调优--2.基础:参数说明(堆参数说明),垃圾收集器(前置知识:垃圾回收算法,GC种类),垃圾收集器(种类,相关介绍)

JVM垃圾收集器

JVM垃圾收集器

GC垃圾回收 | 深入理解G1垃圾收集器和GC日志