50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:004085

评论

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

低代码开发:学校低成本数字化转型的新引擎

不在线第一只蜗牛

低代码 数字化

程序员必会的6个数据可视化库

伤感汤姆布利柏

监管人工智能——未来之路

孤傲小二~阿沐

适用于预算少企业的网络组网方案

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

鸿蒙Next怎么升级更便捷

FinFish

纯血鸿蒙 鸿蒙化改造 鸿蒙app 鸿蒙app升级 混合app开发

除了Sora,还有哪些AI软件工具值得推荐?这30个一定要知道!

彭宏豪95

AI软件 AIGC AI工具

管理者请注意,要珍惜有愤怒情绪的员工

芃篙君

管理

如何保障服务的高可用:提升可观测性

SFLYQ

高可用 后端 可观测性

教你如何拿Merlin Chain空投,附视频教程

BlockChain先知

细粒度的代码权限怎么做?极狐GitLab 代码所有者来帮忙

极狐GitLab

专业期刊邀请,天谋科技围绕 IoTDB 及 TsFile 刊文《Java aktuell》并将于 JavaLand 峰会作报告

Apache IoTDB

软件测试学习笔记丨ES(Elasticsearch)介绍

测试人

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

ETL、ELT区别以及如何正确运用

谷云科技RestCloud

ETL 数据集成 ELT

一座“超级工厂”:让中国没有流不通的数据

脑极体

数据

比特币原生 L2 解决方案 Merlin Chain梅林链科普(bitget wallet)

股市老人

京东商品详情数据采集方法代码展示

tbapi

京东API接口 京东商品详情接口

微帧为央视大年初二《2024春节戏曲晚会》提供AI画质增强服务

微帧Visionular

画质增强 超高清处理

数字化,网络化和未来的AI

agnostic

人工智能 信息化

比特币原生 L2 解决方案 Merlin Chain梅林链科普(bitget wallet)

股市老人

Java并发编程基础(下)

FunTester

深入解析 Java 面向对象编程与类属性应用

小万哥

Java 程序人生 编程语言 软件工程 后端开发

教你如何拿Merlin Chain空投,附视频教程

石头财经

NGINX Agent 的可观测性和远程配置

NGINX开源社区

一条Linux命令打败99%的运维

伤感汤姆布利柏

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