JVM (三)- GC 垃圾回收器

        GC 垃圾回收器

CMS 

        Concurrent Mark-Sweep 

        老年代回收器

        CMS:一种以获得最短停顿时间为目标的收集器,非常适用 B/S 系统。

        是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动 JVM 的参数加上“-XX:+UseConcMarkSweepGC”来指定使用 CMS 垃圾回收器

        标记 - 清除垃圾算法实现 : 

                标记无用对象,然后进行清除回收。缺点:效率不高,无法清除垃圾碎片。

Serial Old

         CMS 的备选,Serial 垃圾回收器的老年版本,单线程

         老年代回收器

         标记 - 整理算法 进行垃圾回收:

                 标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。

Parallel Old 

          Serial Old 的多线程版本, Prallel Old 的老生代版本;

          老年代回收器

           标记-整理的内存回收算法 :

                    标记无用对象,让所有存活的对象都向一端移动,然后直接清除掉端边界以外的内存。

Serial 

        最早的单线程串行垃圾回收器

        新生代回收器

        复制算法 : 按照容量划分二个大小相等的内存区域,当一块用完的时候将活着的对象复制到另一块上,然后再把已使用的内存空间一次清理掉。缺点:内存使用率不高,

只有原来的一半。

               

ParNew

      ParNew 是 Serail 的多线程版本   

      新生代回收器

      复制算法 :

Parallel 

       和 ParNew 收集器类似是多线程的,但 Parallel 是吞吐量优先的收集器,可以牺牲等待时间换取系统的吞吐量。

G1

     整堆回收器:

      一种兼顾吞吐量和停顿时间的 GC 实现,是 JDK 9 以后的默认 GC 选项。

分代垃圾回收器

     分代回收器有两个分区:老生代和新生代,新生代默认的空间占比总空间的 1/3,老生代的默认占比是 2/3。

     新生代使用的是复制算法,新生代里有 3 个分区:Eden、To Survivor、From Survivor,它们的默认占比是 8:1:1,它的执行流程如下

     把 Eden + From Survivor 存活的对象放入 To Survivor 区;

     清空 Eden 和 From Survivor 分区;
          From Survivor 和 To Survivor 分区交换,From Survivor 变 To Survivor,To Survivor
          变 From Survivor。

     

猜你喜欢

转载自www.cnblogs.com/Jomini/p/13201640.html