在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

Java 9 发布在即,Oracle OpenJDK 着手优化 Unsafe 类

  • 2016-05-06
  • 本文字数:1093 字

    阅读完需:约 4 分钟

java 9 正式版预计在 2017 年 2 季度发布,目前大部分 JEP 已经基本成型。其中,最关键特性或许是 JEP 261 , 该 JEP 实现了 java 平台的模块系统, 具体说明可以参见 JSR376 。 模块系统依赖于 JEP260 (封装了大部分内部 API),导致的结果是 JEP193 定义的多个句柄会暴露 sun.misc.Unsafe 类的功能。此前 Info报道过致力于解决sun.misc.Unsafe 句柄问题的团队,可能的解决方案细节亦可参见另一篇报道

Bug 8149159 最近被提交到 JDK Bug 管理系统, 建议优化和清理 Unsafe 类, 包括将参数检查从本地代码移入 Java(简化 JIT)、 sun.misc.Unsafe 类和 jdk.internal.misc.Unsafe 类的统一、 以及本地代码的整体清理。

2 月 18 日,Oracle 工程师 Mikael Vidstedt 向 OpenJDK 开发者社区提交了两个补丁(分别针对 OpenJDK 和 OpenJDK HotSpot VM)

关于这两个补丁,Vidstedt 总结道:

  • 避免代码重复,sun.misc.Unsafe 将全部实现委托给 jdk.internal.misc.Unsafe,这意味着 java 虚拟机 (特别是 unsafe.cpp)不再需要关心 s.m.Unsafe 的实现。
  • s.m.Unsafe 的委托方法通常会被内联,但是为了避免性能下降的风险,仍然添加了 @ForceInline 注解
  • 更新文档,指明用户应该确保 Unsafe 类的参数正确
  • 参数检查从 Unsage.cpp 移入 java,简化本地代码以及允许 JIT 进一步优化
  • 放松了特定参数的检查,比方说最近引入的 U.copySwapMemory 没有检查空指针。具体原因可以参考 j.i.m.U.checkPointer 的文档。除了 U.copySwapMemory,现在 Unsafe 类方法也都没有对参数执行 NULL 检查
  • 在 U.copySwapMemory 类的基础上,对 j.i.m.U.copyMemory 增加了一个测试案例。请随时提醒我合并过来(本该如此)

在 Vidstedt 看来,Usage 类的清理算是“相当激进”了,值得注意的地方有:

  • Unsafe_ 方法以及 unsafe.cpp 中的其他本地方法被申明为静态方法
  • 新增 unsafe.hpp 代码文件,文件中移入 VM 其他组件的一些方法。移除部分“extern”函数声明(不要过度使用 extern)
  • 对于不怎么用到的 UNSAFE_LEAF,移除警告性质的注释(没有必要,只是个 VM_LEAF)
  • 一些简单的 leaf 方法使用 UNSAFE_LEAF
  • UNSAFE_ENTRY/UNSAFE_END 代码块新增大括号,帮助自动缩进
  • 移除未使用的 Unsafe_<…>##140 形式的函数和宏
  • 更新宏参数,与 unsafe.cpp 的宏定义保持一致
  • 更换带断言的参数检查,正如前面提及,这些检查移入了 j.i.m.Unsafe,移除所有 s.m.Unsafe 相关的代码

查看英文原文: Oracle’s OpenJDK Cleanup of “Unsafe” Implementation


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-06 19:004205

评论

发布
暂无评论
发现更多内容

Spring为什么需要三个级别的缓存来解决循环依赖

Java spring 面试 循环依赖 三级缓存

《2023产业互联网安全十大趋势》发布,研判产业安全新趋势

极客天地

混合多云第二课——混合技术如何每年为京东节省上亿元成本?

京东科技开发者

云原生 混合云 混合多云

一文详解Java中的ThreadLocal

Java 多线程 线程池 ThreadLocal

Java开发一年不到,来面试居然敢开口要20K,面完连8K都不想给~

程序知音

Java 编程语言 java面试 java架构 八股文

牛掰!“基础-中级-高级”Java程序员面试集结,看完献出我的膝盖

Java java面试 Java八股文 Java面试题 Java面试八股文

Kruise Rollout v0.3.0:教你玩转 Deployment 分批发布和流量灰度

阿里巴巴中间件

阿里云 云原生 OpenKruise

GameFi游戏NFT链游开发系统搭建技术

薇電13242772558

NFT

2022年总结之 禅道团队扩张篇

禅道项目管理

软件测试/测试开发丨app自动化测试之Appium 源码分析

测试人

软件测试 自动化测试 测试开发 appium

宝塔SSH ROOT账号无法登录

源字节1号

开源 软件开发 小程序开发

软件测试类型有哪些?它们之间的区别和联系

测吧(北京)科技有限公司

测试

成年人自学黑客,远比你想的更难......

喀拉峻

程序员 黑客 网络安全 计算机 渗透测试

全球使用率最高的五款3DMax插件,总有一款适合你

Finovy Cloud

软件 3ds Max

文档智能分析产业实践,基于PP-StructureV2和OpenVINO实现训练部署开发全流程

飞桨PaddlePaddle

腾讯T4整合Spring+Spring MVC+MyBatis+Redis实现,附源码

Java redis 面试 SSM框架

CSIG企业行-走进合合信息成功举行,聚焦生成式人工智能、智能文档处理前沿热点

合合技术团队

人工智能 图像识别 ChatGPT 文档处理 生成式人工智能

软件测试/测试开发丨app自动化测试之Appium问题分析及定位

测试人

软件测试 自动化测试 测试开发 appium

AI 未来已至,向量数据库站在新的节点上

Zilliz

英伟达 非结构化数据 Milvus 向量数据库

视频转换工具:MacX Video Converter Pro中文版

真大的脸盆

Mac Mac 软件 视频转换 格式转换器

HashData携手新炬网络 共推国产云数仓产业发展

酷克数据HashData

证书过期为何频频发生,该如何避免?

不思jo

故障 #运维

揭秘ChatGPT背后天价超算!上万颗英伟达A100,烧光微软数亿美元

Openlab_cosmoplat

微软 开源社区 ChatGPT

告别“公厕”脏乱差,光明源智慧公厕推进城市智慧化建设

光明源智慧厕所

智慧城市

低代码开发,一场深度的IT效率革命

引迈信息

前端 软件开发 低代码 JNPF

双非渣硕,开发一年,苦刷算法三个月,四面字节成功斩获offer

Java 数据结构 面试 算法

软件测试/测试开发丨app自动化测试之Appium 原理 与 JsonWP 协议分析

测试人

软件测试 自动化测试 测试开发 appium

架构训练营模块八作业

gigifrog

架构训练营

Pushing to Git returning Error Code 403

刿刀

阿里云EMAS:2月产品动态

移动研发平台EMAS

阿里云 移动开发 移动研发平台 emas

软件测试/测试开发丨iOS自动化测试之基于模拟器的自动化测试

测试人

ios 软件测试 自动化测试 测试开发

Java 9发布在即,Oracle OpenJDK着手优化Unsafe类_Java_Monica Beckwith_InfoQ精选文章