G1垃圾回收器

G1垃圾回收器是基于标记整理算法实现,不会产生内存碎片,G1不同于其他的收集器,G1的回收范围是整个Java堆,而其他收集器仅限于新生代和老年代。

与此同时为适应不断扩大的内存和不断增加,降低暂停时间,提高吞吐量。

官方的目标设定在延迟可控的情况下获得尽可能高的吞吐量。

 

G1是一个并行的回收器,他将堆内存分割为许多不相关的区域,使用不同的Region来表示Eden,survivor,old。

G1 GC有计划的避免在整个java 堆中进行全区域的垃圾收集.

G1通过跟踪各个region里面垃圾堆积的价值大小,在后台维护一个优先列表,每次根据允许的收集时间,有限 回收价值最大的Region.

 

优点:

(1)并发于并行

     并行性:G1在垃圾回收期间,可以多个GC线程同时工作,有效利用多核计算能力,此时用户线程STW;

     并发性;G1拥有于与用户线程交替执行的能力,部分工作可以和应用程序同时执行。不会在整个回收阶段发生完成阻塞

(2)G1依然属于分代垃圾回收器,他会区分年轻代和老年代。

(3)可预测的停顿时间模型

        G1会通过一个合理的计算模型,计算出每个Region的收集成本,这样以来,收集器在给定了停顿时间限制的情况下。总能选择一组合适的regions作为收集目标

缺点:

G1在垃圾收集过程中产生内存占用和负载较高。

 

垃圾收集过程:

(1)初始标记:标记初GC root直接关联的对象,停止用户线程

(2)并发标记:对GC root 进行可达性分析,找出存活对象,

(3)重新标记:修正并发标记阶段由于用户程序执行而产生变动的记录

(4)筛选回收:对各个region的回收价值和成本排序,根据用户所期望的GC停顿时间来指定回收计划,用户线程停顿。

 

 

适用场景:大内存的场景

https://blog.csdn.net/weixin_45839894/article/details/120433487

posted on 2022-03-02 15:41  云中哥  阅读(162)  评论(0编辑  收藏  举报

导航