BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Monica Beckwith 关注 604 他的粉丝 ,译者 邹政华 关注 0 他的粉丝 发布于 2016年5月7日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT