QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

评论

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

openEuler 资源利用率提升之道 01:概论

openEuler

开源 openEuler 内核 资源管理

架构实战营模块二作业

zhihai.tu

Redis管道技术/分区

恒山其若陋兮

7月月更

汇编语言伪指令详解(附实例)

timerring

汇编语言 7月月更 伪指令

CentOS 7 常用的 11 个小技巧

耳东@Erdong

Linux 7月月更

通过http请求启动jenkins任务

程序员欣宸

Java jenkins 7月月更

Harbor2.2 精细化的权限控制

琦彦

Harbor

D1-H 开发板——哪吒 开发入门

贾献华

7月月更

python干货——函数

Java学术趴

7月日更

计算机网络之初识网络

未见花闻

7月月更

1000个Okaleido Tiger首发上线Binance NFT,引发抢购热潮

BlockChain先知

使用 Vue + Three.js 构建交互式 WEB 作品展示集(一)

devpoint

Vue three.js 7月月更

微信朋友圈的高性能架构设计

张立奎

Qt|字符串生成二维码功能

中国好公民st

qt 7月月更

视频号加强打击低俗内容:对违背公序良俗的内容必须赶尽杀绝

石头IT视角

Qt | 设置部件大小 sizeHint、minimumSizeHint、sizePolicy、stretch factor

YOLO.

qt 7月月更

设计模式之禅(一)

青柚1943

设计模式 SOLID 设计原则

设计模式之禅(二)

青柚1943

设计模式 设计原则 策略模式 观察者模式 模板方法模式

JAVA编程规范之建表规约

源字节1号

后端开发

strncat() strncmp()

謓泽

7月月更

1000个Okaleido Tiger首发上线Binance NFT,引发抢购热潮

鳄鱼视界

ES6箭头函数的使用

bo

JavaScript 前端 ES6 7月月更

在openEuler社区开源的Embedded SIG,来聊聊它的多 OS 混合部署框架

openEuler

Linux 开源 操作系统 嵌入式 openEuler

什么是 Rest 动词

宇宙之一粟

REST API 7月月更

最新的swoole-cli已可以支持Windows,手把手带你在windows体验swoole

迷彩

swoole 服务器开发 7月月更 swoole-cli

LibcarePlus 用户态热补丁技术那些事

openEuler

安全 openEuler 漏洞 #开源

1000个Okaleido Tiger首发上线Binance NFT,引发抢购热潮

股市老人

基于vmware16 和 ubuntu20.04, 搭建单节点 kubernetes 1.22.2

琦彦

ubuntu Kubernetes

Idea:Git的常用菜单操作和常用命令

琦彦

IDEA git常用命令 git 学习

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