首页 > 图灵资讯 > java面试题>正文

JVM高频面试题-G1垃圾收集器

2023-11-11 09:18:26

 

G1垃圾收集器了解吗?

 

 

Garbage First(简称G1)收集器是垃圾收集器的一个颠覆性的产物,它开创了局部收集的设计思路和基于Region的内存布局形式。

虽然G1也仍是遵循分代收集理论设计的,但其堆内存的布局与其他收集器有非常明显的差异。以前的收集器分代是划分新生代、老年代、持久代等。

G1把连续的Java堆划分为多个大小相等的独立区域(Region,每一个Region都可以根据需要,扮演新生代的Eden空间、Survivor空间,或者老年代空间。收集器能够对扮演不同角色的Region采用不同的策略去处理。

更精细的控制、可预测的停顿时间、内存碎片的控制、优先级处理

G1 Heap Regions

每个 Region 都是通过指针碰撞来分配空间

这样就避免了收集整个堆,而是按照若干个Region集进行收集,同时维护一个优先级列表,跟踪各个Region回收的“价值,优先收集价值高的Region。

G1收集器的运行过程大致可划分为以下四个步骤:

  • 初始标记(initial mark),标记了从GC Root开始直接关联可达的对象。STW(Stop the World)执行。
  • 并发标记(concurrent marking),和用户线程并发执行,从GC Root开始对堆中对象进行可达性分析,递归扫描整个堆里的对象图,找出要回收的对象、
  • 最终标记(Remark),STW,标记再并发标记过程中产生的垃圾。= 重新标记(标记的范围更小)
  • 筛选回收(Live Data Counting And Evacuation),制定回收计划,选择多个Region 构成回收集,把回收集中Region的存活对象复制到空的Region中,再清理掉整个旧 Region的全部空间。需要STW。

G1收集器运行示意图


 
上一篇 JVM高频面试题-CMS收集器的垃圾收集过程
下一篇 JVM高频面试题-有了CMS,为什么还要引入G1?

文章素材均来源于网络,如有侵权,请联系管理员删除。