写点什么

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

评论

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

《精益产品开发》随笔

研发管理Jojo

敏捷开发 精益思想 敏捷教练

你的面向接口编程一定对吗?

架构师修行之路

linux入门系列9--用户管理及文件权限控制

黑马腾云

Linux centos centos7 linux运维 linux用户权限

学习笔记

Qx

学习

jQuery笔记

一个坚强的小怪兽

jquery

深度学习框架“国货”正当时,但要警惕无差别投入的“产业陷阱”

脑极体

英伟达收购ARM:双赢还是灾难?

脑极体

JVM原理与实战

东哥

2020年运维行业学啥技术比较值钱?

EUSCE

DevOps 运维 运维自动化 系统运维 linux运维

推荐几个实用的前端编辑工具VSCode插件,让你开发事半功倍,告别加班烦恼

web前端程序猿

vscode 大前端 工具软件

要老婆吗? AR一键生成的那种

程序员生活志

学习python(嵩天老师的课)

Geek_2a27b0

linux入门系列10--firewalld防火墙管理

黑马腾云

Linux centos 防火墙 linux运维 linux防火墙

内容审核平台助力猫爪构建健康安全的社交环境

百度大脑

人工智能 百度 百度大脑 内容审核

MySQL-技术专题-分区表和合并表详解

洛神灬殇

SkyWalking为超大规模而生

热心的朝阳群众

Skywalking 开源社区

SSH免密登录

Radix10

Linux Shell 加密 openssh SSH

你用对锁了吗?浅谈 Java “锁” 事

yes

Java 多线程与高并发

35岁大厂程序员被劝退!老板说:没年轻人有冲劲!真有内味了吗?

程序员生活志

程序员 职场

深化产教融合,共育数字人才

InfoQ_967a83c6d0d7

没有一个冬天不会过去!疫情当下,企业“逆势而上”必选“上云”跑道

华为云开发者联盟

云计算 新基建 华为云 企业上云 云服务器

如何查看Django ORM执行的SQL语句

BigYoung

sql django ORM 查询

为什么Mysql索引非得是B+树

知方可达

MySQL

linux入门系列8--shell编程入门

黑马腾云

Linux centos Shell linux命令 linux编程

区块链的想象,解决贫富差距

CECBC

区块链 货币 股市

B站抽奖

・ 懒ヾ

《八佰》,电影的价值已在真实之外

zhoo299

随笔杂谈 电影

两分钟给你讲清楚JavaScript中的闭包与this

在沉默中

Java 闭包

图解JavaScript——进阶篇(执行上下文、变量对象、作用域、作用域链、闭包、this、原型及原型链、事件循环等一把梭)

执鸢者

Java 大前端 函数执行 事件循环

威联通(NAS)应用篇:搭建个人音乐中心

BigYoung

NAS QNAP 音乐 搭建 无损

没想到,Git居然有3种“后悔药”!

Geek Tech

git git reset

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