一、 垃圾回收

  1. 如何判定对象为垃圾回收?
     1. 引用计数法
     2. **可达性分析法**
  2. 如何回收?
     1. 回收策略
         1. 标记-清除算法
         2. 复制算法
         3. 标记-整理算法
         4. 分代收集算法
     2. 垃圾收集器    
         1. Serial
         2. Parnew
         3. CMS
         4. **G1**
  3. 何时回收?
     1. 引用计数法
     在对象中添加一个引用计数器,引用这个对象的时候计数器+1,引用失效时计数器-1。
     打印gc信息:
         1. -verbose:gc
         2. -xx:+PrintGCDetails
     2. 可达性分析法
     GCRoots的路径能否连接到下一级,不可以则将下一集标记为垃圾
     作为GCRoots的对象
         1. 虚拟机栈
         2. 方法区的类属性所引用的对象
         3. 方法区中常量所引用的对象
         4. 本地方法栈中引用的对象
    二、 回收算法
  • 标记-清除算法
    效率问题
    空间问题:空间不连续
  • 复制算法(分区移动):提高了标记-清除算法的性能
    新生代
      Eden 伊甸园
      Survivor 存活区
      Tenured Gen
    老年代
  • 标记-整理算法
    移动再清除
  • 分代收集算法(复制算法(新生代)+标记-整理算法(老年代))
    三、 垃圾回收器
  1. Serial收集器
    最基本、发展最悠久
    单线程
    桌面应用

  2. ParNew收集器

  3. Parallel Scavenge收集器
    复制算法(新生代收集器)
    多线程收集器
    达到可控制的吞吐量

    吞吐量:CPU用于运行用户代码的时间与CPU消耗的总时间的比值
    吞吐量=(执行用户代码时间)/(执行用户代码时间+垃圾回收时间)
    -XX:MaxGCPauseMills 垃圾收集器最大停顿时间
    -XX:GCTimeRation 吞吐量大小

  4. CMS(Concurrent Mark Sweep)垃圾收集器
    工作过程:

     初始标记
     并发标记
     重新标记
     并发清理

    优点:

     并发收集
     低停顿

    缺点:

     占用大量的CPU资源
     无法处理浮动垃圾
     Concurrent Mode Error
     空间碎片
  5. G1收集器
    优势

     并行与并发
     分代收集
     空间整合
     可预测的停顿

    步骤

     初始标记
     并发标记
     最终标记
     筛选回收