当前位置: 首页 > news >正文

oraclejdk相比较于openjdk,在G1,ZGC,ShenandoahGC垃圾回收器做了哪些具体的优化,此文一篇讲清楚

前言

了解 Oracle JDK 在 G1、ZGC 和 Shenandoah 垃圾回收器(GC)方面的具体优化需要深入了解每个垃圾回收器的内部工作原理及 Oracle 在其基础上所做的具体改进。以下是对 G1、ZGC 和 Shenandoah 垃圾回收器的详细优化分析,包括具体的技术实现和改进措施。

G1 (Garbage-First) 垃圾回收器

G1 是一个旨在替代 CMS 的低停顿垃圾回收器。它通过分区回收和预测模型来优化暂停时间。

Oracle JDK 对 G1 的具体优化
暂停预测模型优化
统计回归模型:Oracle 通过增强暂停预测模型的统计回归算法,使其更精确地预测每个垃圾回收周期的暂停时间。这包括使用历史数据来调整回归参数,以更好地反映实际应用负载和内存使用模式。
自适应算法:引入自适应预测算法,根据运行时的实际暂停时间动态调整预测模型。这种方法允许 G1 更加灵活地应对不同的工作负载,从而减少预测误差。
混合收集(Mixed Collection)策略调整
启发式算法:Oracle 增强了混合收集阶段的启发式算法,使其在选择要回收的分区时更加智能。通过分析分区的活跃度和回收收益,优化选择最适合回收的分区,从而平衡吞吐量和暂停时间。
动态调整策略:根据当前系统的负载情况动态调整混合收集策略。例如,在高负载情况下减少老年代分区的回收频率,以减少长时间暂停。
并发标记优化
多线程标记:优化并发标记阶段的多线程实现,通过更高效的线程同步和负载均衡,减少标记过程中线程间的竞争,提高标记效率。
增量标记:引入增量标记技术,将标记过程分为多个小阶段,避免长时间的单次标记,从而减少对应用线程的影响。
字符串去重(String Deduplication)优化
改进的哈希算法:优化字符串去重过程中使用的哈希算法,提高字符串比较的速度和准确性,减少重复字符串的内存占用。
并发去重:改进去重过程的并发执行方式,使其能够在不影响应用性能的情况下高效地去重字符串。
分区管理优化
分区选择算法:优化分区选择算法,使 G1 在选择要回收的分区时能够更好地考虑内存碎片情况和分区的使用效率,减少内存碎片的生成。
分区合并策略:引入分区合并策略,当发现大量小分区时,G1 会尝试将这些分区合并,以提高内存利用效率。

ZGC (Z Garbage Collector)

ZGC 是一个低停顿垃圾回收器,使用染色指针和并发压缩技术来实现低延迟。

Oracle JDK 对 ZGC 的具体优化
染色指针管理优化
内存屏障优化:优化染色指针使用的内存屏障技术,使得染色指针在管理对象引用时对应用线程的影响最小化。例如,通过减少屏障的开销和优化屏障触发条件,提高整体性能。
染色指针编码:优化染色指针的编码方式,使其能够更高效地存储和解析对象引用信息,减少解析过程中的性能开销。
并发标记和压缩优化
改进的并发标记算法:优化并发标记阶段的算法,提高标记的精度和效率。例如,通过引入更高效的标记位图结构和优化标记路径,减少标记阶段的停顿时间。
压缩算法改进:对并发压缩算法进行优化,使其能够更高效地整理和压缩内存。包括引入分区压缩技术,将压缩过程分为多个小步骤,减少单次压缩的停顿时间。
NUMA 友好性优化
内存分配策略:优化 ZGC 在 NUMA 系统上的内存分配策略,使其能够更好地利用 NUMA 节点的局部性,减少跨节点内存访问延迟。例如,通过优先在本地节点分配内存,优化线程和内存的亲和性。
堆管理优化
动态堆调整:引入动态堆调整策略,根据应用的内存使用情况动态调整堆的大小和布局,以提高内存利用效率和垃圾回收性能。
分区管理优化:改进分区管理算法,使 ZGC 能够更高效地管理大规模堆内存,减少分区碎片和管理开销。
垃圾回收线程调度优化
线程优先级调整:优化垃圾回收线程的优先级调度,使其在不影响应用性能的前提下最大化垃圾回收效率。例如,在系统负载较低时提高回收线程的优先级,加快垃圾回收速度。

Shenandoah 垃圾回收器

Shenandoah 是一个低延迟垃圾回收器,采用并发压缩技术来减少停顿时间。

Oracle JDK 对 Shenandoah 的具体优化
并发压缩优化
增量压缩:引入增量压缩技术,将大规模压缩过程分为多个小步骤执行,减少单次压缩的停顿时间,提高整体压缩效率。
压缩策略优化:改进压缩策略,使其能够更好地适应不同的内存使用模式,动态调整压缩参数,以达到最佳性能。
细粒度锁优化
锁分离技术:优化细粒度锁的实现,通过锁分离技术减少锁竞争,提高并发性能。例如,将全局锁拆分为多个局部锁,使多个线程能够并行执行垃圾回收任务。
自适应锁策略:引入自适应锁策略,根据运行时的实际负载动态调整锁的策略,以减少锁争用和等待时间。
自适应调整策略
动态参数调整:引入自适应调整策略,根据应用的运行时表现动态调整垃圾回收参数,如垃圾回收频率、压缩策略等,以达到最佳性能和平衡。
负载感知优化:根据系统负载情况动态调整垃圾回收策略,使 Shenandoah 能够在不同负载下均保持高效的垃圾回收性能。
内存访问优化
并发访问优化:优化并发内存访问路径,使 Shenandoah 在进行垃圾回收时对应用线程的影响最小化。例如,通过优化内存屏障和访问控制,减少内存访问开销。
对象布局优化:优化对象在内存中的布局,使内存访问更加高效,减少垃圾回收过程中对象移动和整理的成本。
内存屏障优化
屏障合并:优化内存屏障的实现,通过屏障合并技术减少垃圾回收过程中屏障操作的次数,提高整体性能。
屏障触发条件优化:优化内存屏障的触发条件,使其在最需要的时候触发,减少不必要的屏障开销。

总结

Oracle 在 G1、ZGC 和 Shenandoah 垃圾回收器上进行了大量具体的优化,这些优化不仅涉及算法和数据结构的改进,还包括对并发执行、内存管理和系统适配的深度优化。这些具体的技术实现和改进措施,使得 Oracle JDK 在垃圾回收性能和稳定性上明显优于 OpenJDK,特别是在高并发、大内存应用环境中表现尤为突出。理解这些优化细节,对于开发和运维人员选择和调优垃圾回收器具有重要参考价值。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringSecurity框架【认证】
  • Windows搭建RTMP视频流服务器
  • 3. 序列生成
  • 迭代器+反向迭代器
  • mysql修改数据库名称
  • LabVIEW机器学习实现外观检测
  • 解决selenium打印你保存为PDF时图片未加载成功的问题
  • python 网络篇(网络编程)
  • linux高级编程(网络)(www,http,URL)
  • kaggle 量化交易 比赛
  • 【瑞吉外卖 | day07】移动端菜品展示、购物车、下单
  • request method ‘DELETE‘ is not supported问题
  • Vue3 父传子props双向数据绑定 defineProps 和 defineModel
  • The Web3 社区 Web3 产品经理课程
  • DNS 轮询解析怎么理解?
  • canvas 五子棋游戏
  • Flannel解读
  • js面向对象
  • php ci框架整合银盛支付
  • React-redux的原理以及使用
  • 测试开发系类之接口自动化测试
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于游标的分页接口实现
  • 跨域
  • 理清楚Vue的结构
  • 前端相关框架总和
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 入手阿里云新服务器的部署NODE
  • 使用SAX解析XML
  • 想使用 MongoDB ,你应该了解这8个方面!
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #HarmonyOS:基础语法
  • (1)STL算法之遍历容器
  • (1)svelte 教程:hello world
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (AngularJS)Angular 控制器之间通信初探
  • (javaweb)Http协议
  • (rabbitmq的高级特性)消息可靠性
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (不用互三)AI绘画工具应该如何选择
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (黑马点评)二、短信登录功能实现
  • (力扣)1314.矩阵区域和
  • (六)vue-router+UI组件库
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (一)Docker基本介绍
  • (轉)JSON.stringify 语法实例讲解
  • (自用)交互协议设计——protobuf序列化