讲师中心 微信公众号
AI工具推荐 视频效率加速

JVM中Shenandoah收集器在现代JDK版本中逐步用Load-Reference Barriers替代Brooks Pointer

风浩同学_7789

风浩同学_7789

发布时间:2026-06-06 16:50:38

|

685人浏览过

|

来源于php中文网

原创

Shenandoah 仍以 Brooks Pointer 为核心转发机制,Load-Reference Barrier 是其读屏障的精确命名而非替代方案;它依赖对象头中的 forwarding pointer 字段实现并发移动,与 ZGC 的染色指针本质不同。

jvm中shenandoah收集器在现代jdk版本中逐步用load-reference barriers替代brooks pointer

这个说法不准确。截至 JDK 23(当前最新稳定版,2026 年中),Shenandoah 仍在使用 Brooks Pointer 作为其核心转发机制,并未被 Load-Reference Barriers 替代。

Brooks Pointer 仍是 Shenandoah 的基础设计

Shenandoah 的对象移动一致性完全依赖 Brooks Pointer:每个对象头内(或紧邻)保留一个原子可更新的 forwarding pointer 字段。当对象被并发复制后,GC 线程通过 CAS 将该指针从指向自身改为指向新副本地址。所有后续读取操作都必须经过读屏障检查该指针,并自动跳转——这是 Shenandoah 实现“无需 STW 移动对象”的根本保障。

  • 该机制自 JDK 12 引入起未被移除,JDK 15 正式转正、JDK 17/21/23 持续优化的都是同一套 Brooks 指针模型
  • 官方文档、OpenJDK 源码(如 shenandoahBarrierSet::load_reference_barrier)和 JVM 参数(如 -XX:+ShenandoahLoadRefBarrier)均表明:读屏障是作用于 Brooks Pointer 的检查逻辑,而非替代它
  • 所谓 “Load-Reference Barrier” 是 Shenandoah 中对读屏障的更精确命名(强调它拦截的是引用类型的 load 操作),但它本身不改变底层转发语义,仍需访问并解引用对象头中的 fwdptr 字段

与 ZGC 的染色指针有本质区别

ZGC 确实不依赖对象头字段,而是靠指针高位编码 + 多重内存映射实现无转发字段的并发移动。它的读屏障是纯地址位运算,不访问堆内存。但 Shenandoah 的设计哲学不同:

Java JDK 25
Java JDK 25

Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。

下载
  • 它选择显式存储转发信息在对象头,换来更强的平台兼容性(全平台支持,包括某些不支持 mmap 多映射的嵌入式环境)
  • 它接受每个对象 +8 字节开销和一次间接跳转成本,换取实现简洁性和对 JIT 友好的内存访问模式
  • 没有计划用 ZGC 风格的染色指针取代 Brooks Pointer;二者是并行演进的不同技术路线

关于“替代”说法可能的来源

部分社区讨论或旧资料中提到的 “Load-Reference Barrier 优化”,实际是指:

  • JDK 13 起对原有读屏障做精细化拆分,区分普通 load 和引用类型 load,减少非必要开销
  • JDK 17+ 引入的 -XX:+ShenandoahSATBBarrier 或 -XX:+ShenandoahWriteBarrier 等开关,用于调试或特定场景裁剪,但不关闭 Brooks Pointer 依赖
  • 将“读屏障”统称为 “Load-Reference Barrier” 是术语规范化,不是架构替换

简言之:Brooks Pointer 是 Shenandoah 的骨骼,读屏障(含 Load-Reference Barrier)是附着其上的肌肉——肌肉可以锻炼优化,但不会把骨头换掉。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

20

2026.10.10

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

0

2026.10.10

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

20

2026.10.10

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

20

2026.10.10

C++构造函数定义与调用方法
C++构造函数定义与调用方法

C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

20

2026.10.10

Kratos框架零基础入门教程
Kratos框架零基础入门教程

本专题整理Kratos框架入门内容,涵盖Go环境准备、kratos CLI安装升级、new命令创建项目、目录结构分层说明、服务启动与双协议端口、依赖下载报错排查,帮助开发者快速跑通第一个Kratos框架微服务应用。

20

2026.10.10

C++条件判断语句怎么写
C++条件判断语句怎么写

C++条件判断是控制程序执行流程的重要基础。本专题介绍if、if-else、else if和switch等常见分支语句,结合条件表达式、比较运算符与代码示例,帮助初学者掌握不同场景下的判断逻辑。

0

2026.10.10

C++变量怎么声明和赋值
C++变量怎么声明和赋值

C++变量是编写程序和存储数据的基础。本专题围绕变量声明、定义、初始化、赋值和类型选择等内容展开,帮助初学者理解不同变量的用法,并掌握在实际代码中定义和使用变量的方法。

20

2026.10.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn