美文网首页
JVM七大垃圾回收器之 G1

JVM七大垃圾回收器之 G1

作者: 南园故剑00 | 来源:发表于2020-08-30 08:33 被阅读0次

G1回收过程:年轻代GC

  1. 扫描根
    根是指static变量指向的对象,正在执行的方法调用链条上的局部变量等。根引用连同Rset记录的外部引用作为扫描存活对象的入口。
  2. 更新RSet
    处理Dirty cardqueue 中的card,更新Rset。此阶段后,RSet可以准确的反映老年代对所在内存分段中对象的引用。
  3. 处理Rset
    识别被老年代对象指向的eden中的对象,这些被指向的eden中的对象被认为是存活的对象。
  4. 复制对象
    此阶段对象树被遍历,eden内存段中存活的对象会被复制到survivor区中空的内存分段,Survivor区内存段中存活的对象如果年龄未达到阈值,年龄会+1,达到阈值会被复制到old区域中空的内存分段。如果survivor空间不够,eden空间的部分数据会直接晋升到老年代空间。
  5. 处理引用
    处理soft、weak、phantom、final、JNI Weak等引用。最终eden空间的数据为空,GC停止工作,而目标内存中的对象都是连续存储的,没有碎片,所以复制过程中可以达到内存整理的效果,较少碎片。
  1. 初始标记阶段:标记从根节点直接可达的对象。STW,并会触发一次年轻代GC。
  2. 根区域扫描:G1 GC扫描survivor区直接可达的老年代区域对象,并标记被引用的对象。这个过程必须在young GC之前完成。
  3. 并发标记:在整个堆中进行并发标记,此过程可能被young GC中断。在并发标记阶段,若发现区域对象中的所有对象都是垃圾,那这个区域会被立即回收。同时,并发标记过程中,会计算每个区域的对象活性(区域中存活对象的比例)
  4. 再次标记:由于应用程序持续进行,需要修正上一次的标记结果。是STW的。G1采用了比CMS更快的初始快照算法:snapshot-at-the-beginning SATB
  5. 独占清理:计算各个区域的存活对象和GC回收比例,并进行排序,识别可以混合回收的区域,为下阶段做铺垫。是STW的。这个阶段并不会实际去做垃圾的收集。
  6. 并发清理阶段:识别并清理完全空闲的区域。









相关文章

  • JVM源码分析系列

    JVM G1算法系列 G1垃圾收集器介绍 G1垃圾收集器之RSet G1垃圾收集器之SATB G1垃圾收集器之对象...

  • Java 垃圾回收器之G1详解

    Java 垃圾回收器之G1详解 概述 G1垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。...

  • 垃圾回收算法

    G1垃圾回收和其他的区别 串行回收:主要面向单线程环境 并行/吞吐量回收器:JVM默认回收器,Parallel c...

  • Java两种垃圾回收器G1与CMS

    Java两种垃圾回收器G1与CMS JVM 体系架构 JVM主要组成组件:类加载器(class loader),运...

  • G1收集器详解

    详解 JVM Garbage First(G1) 垃圾收集器 G1垃圾收集器入门

  • JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比

    谈垃圾回收器之前,要先讲讲垃圾回收算法,以及JVM对垃圾的认定策略,JVM垃圾回收器是垃圾回收算法的具体实现,了解...

  • 2020-04-03 JVM垃圾回收相关文章引用

    这三篇文章总结的非常到位,收藏在这里。 Jvm垃圾回收器(基础篇) Jvm垃圾回收器(算法篇) Jvm垃圾回收器(...

  • JVM七大垃圾回收器之 G1

    G1回收过程:年轻代GC 扫描根根是指static变量指向的对象,正在执行的方法调用链条上的局部变量等。根引用连同...

  • JVM之G1垃圾回收器

    G1垃圾回收器 stop the world,这个是最痛的一个点!无论是新生代垃圾回收,还是老年代垃圾回收,都会或...

  • JVM垃圾收集器总结

    通过上篇JVM垃圾回收算法和垃圾收集器我们对JVM的七大垃圾收集器的运行原理有了大致的了解,我们来总结一下他们之间...

网友评论

      本文标题:JVM七大垃圾回收器之 G1

      本文链接:https://www.haomeiwen.com/subject/xacjsktx.html