Serial GC:串行回收

1. 概述

  1. 是最基本、历史最悠久的垃圾收集器了。JDK1.3之前回收新生代唯一的选择
  2. 作为HotSpot中Client模式下的默认新生代垃圾收集器
  3. Serial收集器采用复制算法、串行回收和”Stop-the-World”机制的方式执行内存回收
  4. 除了年轻代之外,还提供用于执行老年代垃圾收集的Serial old收集器。Serial old收集器同样也采用了串行回收和”Stop the World”机制,只不过内存回收算法使用的是标记-压缩算法。
  5. 收集过程全程Stop The World

Serial Old是运⾏在 Client 模式下默认的⽼年代的垃圾回收器

Serial Old  Server 模式下主要有两个⽤途:

        ① 可以与新⽣代的 Parallel Scavenge 配合使⽤。

        ② 作为⽼年代 CMS 收集器的后备垃圾收集⽅案,是⾼级垃圾回收器⽆法⼯作时的保底策略

        这个收集器是⼀个单线程的收集器,但它的 “单线程的意义并不仅仅说明它只会使⽤⼀个 CPU 或⼀条收集线 程去完成垃圾收集⼯作,更重要的是在它进⾏垃圾收集时,必须暂停其他所有的⼯作线程,直到它收集结束 (Stop The World

2. 优势

  1. 简单而高效(与其他收集器的单线程比),对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。
  2. 运行在Client模式下的虚拟机是个不错的选择。

3. 场景

  1. 吞吐量小:内存回收工作量不大
  2. 容忍延迟:不在意卡顿
  3. 单核、内存小:0~100M 来自Oracle文档
  4. 客户端程序,应用以-client模式运行时,默认使用的就是Serial

4. 参数

  1. -XX:+UseSerialGC
  2. 可以指定年轻代和老年代都使用串行收集器
  3. 等价于新生代用Serial GC,且老年代用Serial0ldGc

5. 测试

/**
 * -Xmx20M -Xmn10M -XX:+PrintGCDetails  -XX:+UseSerialGC -XX:+PrintGCTimeStamps
 * eden so s1  8:1:1   8M
 * 0.25*27    6.5M       26 27
 * 0.2   33    6.6       33 34
 */
public class SerialGC {
    private static int size = 1024 * 200;

    public static void main(String[] args) {

        for (int i = 0; i < 34; i++) {
            byte[] allo = new byte[size];
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值