当前位置: > Linux新闻 >

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

时间:2016-05-07 13:01来源:linux.it.net.cn 作者:IT

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



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容