java虚拟机垃圾回收算法和工具是我们在学习java虚拟机的时候需要重点掌握的编程知识,而今天我们就通过案例分析来了解一下,java虚拟机ZGC垃圾收集器的实现方法。

1、染色指针

HotSpot的垃圾收集器,有几种不同的标记实现方案。

把标记直接记录在对象头上(Serial收集器)。

把标记记录在于对象相互独立的数据结构上(G1、Shenandoah使用了一种相当于堆内存的1/64大小的,称为BitMap的结构来记录标记信息)。

ZGC染色指针直接把标记信息记载引用对象的指针上。

染色指针是一种直接将少量额外的信息存储在指针上的技术。

目前Linux下64位指针的高18位不能用来寻址,但剩余的46位指针所能支持的64TB内存仍然鞥呢够充分满足大型服务器的需要。鉴于此,ZGC将其高4位提取出来存储四个标志信息。

通过这些标志虚拟机就可以直接从指针中看到器引用对象的三色标记状态(Marked0、Marked1)、是否进入了重分配集(是否被移动过——Remapped)、是否只能通过finalize()方法才能被访问到(Finalizable)。由于这些标志位进一步压缩了原本只有46位的地址空寂,导致ZGC能够管理的内存不可以超过4TB。

2、染色指针的优势

染色指针可以使得一旦某个Region的存活对象被移走之后,这个Region立即就能够被释放和重用掉,而不必等待整个堆中所有指令向该Region的引用都被修正后才能清理。

染色指针可以大幅减少在垃圾收集过程中内存屏障的使用数量,设置内存屏障,尤其是在写屏障的目的通常是为了记录对象引用的变动情况,如果将这些信息直接维护在指针中,显然就可以省去一些专门的记录操作。

染色指针可以作为一种可扩展的存储结构用来记录更多与对象标记、重定位过程相关的数据,以便日后进一步提高性能。

3、ZGC的运作过程

并发标记(ConcurrentMark):与G1、Shenandoah一样,并发标记是遍历对象图做可达性分析的阶段,前后也要经过类似于G1、Shenandoah的初始标记、终标记的短暂停顿,而且这些停顿阶段所做的事情在目标上也是相类似的。

并发预备重分配(ConcurrentPrepareforRelocate):这个阶段需要根据特定的查询条件统计得出本次收集过程要清理哪些Region,将这些Region组成重分配集(RelocationSet)。

并发重分配(ConcurrentRelocate):重分配是ZGC执行过程中的核心阶段,这个过程要把重分配集中的存活对象复制到新的Region上,并为重分配集中的每个Region维护一个转发表(ForwardTable),记录从旧对象到新对象的转向关系。

并发重映射(ConcurrentRemap):重映射所做的就是修正整个堆中指向重分配集中旧对象的所有引用,ZGC的并发映射并不是以一个必须要“迫切”去完成的任务。ZGC很巧妙地把并发重映射阶段要做的工作,合并到下一次垃圾收集循环中的并发标记阶段里去完成,反正他们都是要遍历所有对象的,这样合并节省了一次遍历的开销。

【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。

java垃圾收集器zgc_java虚拟机ZGC垃圾收集器的实现方法相关推荐

  1. JVM之(Shenandoah、ZGC收集器)(基于《深入理解Java虚拟机》之第三章垃圾收集器与内存分配策略)(下)

    上一篇丹丹学妹已经给我讲了七种经典的GC器,那到底怎么样的GC器才能称的上"完美"? asda这就涉及到了衡量GC器性能的三项最重要的指标:①.内存占用②.吞吐量 ③.低时延 ,有 ...

  2. 深入理解java虚拟机—— 虚拟机 新型垃圾收集器 Shenandoah GC, ZGC

    目录 一.垃圾回收器的发展历程简介: 二.衡量垃圾收集器的三项最重要的指标 1.计算机的发展趋势以及垃圾回收器的选择 Shenandoah相比起G1又有什么改进? Shenandoah收集器的工作过程 ...

  3. Java——七种垃圾收集器+JDK11最新ZGC

    JDK1.8之前的堆内存示意图: 从上图可以看出堆内存的分为新生代.老年代和永久代.新生代又被进一步分为:Eden 区+Survior1 区+Survior2 区.值得注意的是,在 JDK 1.8中移 ...

  4. Java虚拟机04——垃圾收集器

    主要介绍HotSpot虚拟机的垃圾收集器,这个虚拟机包含的所有收集器如图所示: 可以看到,收集器之间是可以搭配使用的.下面介绍这些收集器的特性.基本原理和使用场景.在介绍之前先明确一个观点:直到现在为 ...

  5. 《深入理解Java虚拟机》——垃圾收集器的具体实现

    2019独角兽企业重金招聘Python工程师标准>>> 如果说收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现.Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定 ...

  6. java虚拟机手动内存分配_《深入理解java虚拟机》-垃圾收集器与内存分配策略

    如何判断对象已死? 引用计数算法 在对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1:当引用失效时,计数器减1:其中计数器为0的对象是不可能再被使用的已死对象. 引用计数算法的实现很简单 ...

  7. 关于JVM虚拟机的垃圾收集器7种——摘自《深入理解java虚拟机》(每天学一点Day20191114)

    虚拟机的垃圾收集器(98页) 1.Serial(串行)收集器:最基本.发展历史最悠久的收集器.虚拟机运行在Client模式下的默认新生代收集器.新生代采用复制算法暂停所有用户线程.老年代采用标记-整理 ...

  8. java虚拟机系列:垃圾收集器

    垃圾收集器是垃圾回收算法(标记-清除算法.复制算法.标记-整理算法)的具体实现,不同商家.不同版本的JVM所提供的垃圾收集器可能会有很在差别. 图中展示了7种不同分代的收集器: Serial.ParN ...

  9. 深入理解Java虚拟机 -- 经典垃圾收集器

    文章目录 1. 综述 2. Serial收集器 3. ParNew收集器 4. Parallel Scavenge收集器 5. Serial Old收集器 6. Parallel Old收集器 7. ...

最新文章

  1. oracle生成42位,Oracle HowTo:如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
  2. 算法-排序-插入排序
  3. 使用手机访问vue项目
  4. 汽车LED驱动器MPQ3326替代替换
  5. c++filt看函数名
  6. 强哥日常高效工作流骨灰级玩家培训课程
  7. API接口怎么使用(教你使用api接口获取数据)
  8. 稀疏矩阵 存储格式 COO CSR DIA ELL HYB
  9. 使用Matlab的appdesigner创建一个简单的图像处理app
  10. php和android和mysql_如何使用JSON连接Android和PHP Mysql数据库
  11. 2018最新Web前端经典面试题与答案
  12. Fisher information(费雪信息)和费雪信息矩阵
  13. 资源调度源码分析和任务调度源码分析
  14. SSM框架学习文档以及SSM整合(附Github地址=含SSM学习时的实例代码)
  15. 计算机博士与管理科学与工程博士,南昌大学《管理科学与工程》专业博士研究生培养方案...
  16. 金蝶EAS服务器生成子系统树
  17. WPF中,如何将Vista Aero效果扩展到整个窗口
  18. fstream写入文件失败
  19. 深度研究:GameFi 持续繁荣的可行解
  20. 【网络间谍篇】SolarWinds供应链攻击事件的来龙去脉

热门文章

  1. Tomcat学习总结(11)——Linux下的Tomcat安全优化
  2. python writelines_Python文件writelines()方法
  3. 三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)
  4. Java笔记3:Eclipse添加jar包
  5. elixir 关键字列表
  6. java下载远程文件到本地
  7. POJ-1035 Spell checker 暴力
  8. python,无网、没网、生成环境迁移安装环境,支持virtualenv
  9. 张季跃 201771010139《面向对象程序设计(java)》第十八周学习总结
  10. Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用...