base - G1垃圾收集器有什么特殊的?

139 阅读2分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. G1真的不一般?
    是的,自古以来,思想上的转变永远是最难的,作为一款垃圾收集器来说,G1的优势并不是绝对的,但是它在思想上的进步确是里程碑式的。正因为它的开创性的思想,才有了后来更为先进的ZGC以及Shenandoah垃圾收集器。其实后两种不过是在G1基础上的继承与优化。可以毫不夸张的说,G1开启了垃圾收集器的新时代。
  2. 有什么好的思想转变?
    1> 分治思想,化整为零。不再进行固定的分代收集,而是基于Region的内存管理以及局部的垃圾收集。Region的大小可以通过-XX: G1HeapRegionSize指定。
    2> 相对论。不再追求彻底收集,而是相对于对象分配速度进行收集,只要垃圾收集的速度能够满足对象分配就行。
    3> 建立停顿时间模型,近实时垃圾收集。收集停顿时间可以通过:-XX: MaxGCPauseMillis指定。
    4>根据区域的回收价值来进行回收。
  3. G1的垃圾收集过程
    在这里插入图片描述
    1> 初始标记
    标记GC Roots能直接关联到的对象。
    2> 并发标记
    从GC Roots开始对对堆中对象进行可达性分析,递归扫描整个堆里的对象图,找出要回收的对象,这阶段耗时较长,可与用户线程并发执行。
    3> 最终标记
    处理并发阶段结束后遗留下来的被用户线程改变的少量引用。
    4> 筛选回收
    负责更新Region的统计数据,对各个Region的回收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划进行垃圾回收。