AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

评论

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

软件测试 | 测试开发 | Appium 自动化测试从基础到框架实战精华学习笔记(一)

测吧(北京)科技有限公司

测试

2022-09-16:以下go语言代码输出什么?A:101;B:100;C:1;D:2。 package main import ( “fmt“ ) type MS struct {

福大大架构师每日一题

golang 福大大 选择题

【MySQL 进阶】事务二

六月暴雪飞梨花

MySQL 事务 9月月更 InnoDB存储引擎

第四章 C语言之牛客网刷题📖笔记

Dream-Y.ocean

c 算法 9月月更

软件测试 | 测试开发 | Appium 自动化测试从入门到框架实战精华学习笔记(二)

测吧(北京)科技有限公司

测试

每日算法刷题Day11-最大公约数、数组去重

timerring

算法题 9月月更

PC市场如何再起波澜?荣耀的创新或是答案

脑极体

Java学习--SpringBoot 常用注解详解(一)

六月的雨在InfoQ

Spring Boot Spring MVC Spring注解 9月月更

【指针内功修炼】函数指针 + 函数指针数组 + 回调函数(二)

Albert Edison

数组 指针 C语言 9月月更 指针数组

【C语言】自定义类型(结构体类型+枚举类型+联合体类型)[进阶篇_ 复习专用]

Dream-Y.ocean

c 结构体 9月月更

全新 Amazon RDS for MySQL 和 PostgreSQL 多可用区部署选项

亚马逊云科技 (Amazon Web Services)

Java 学习 --SpringBoot 常用注解详解(二)

六月的雨在InfoQ

springboot 注解 Spring Bean @Component 9月月更

软件测试 | 测试开发 | maven构建加速方法

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 接口测试之HTTP 协议讲解

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | app自动化测试(Android)--App 控件定位

测吧(北京)科技有限公司

测试

[MyBatisPlus]MyBatisPlus简介、入门案例

十八岁讨厌编程

Java 后端开发 9月月更

[SSM]异常处理

十八岁讨厌编程

Java 后端 9月月更

工赋开发者社区 | 大“火”的扩散模型综述又一弹!UCF等《视觉扩散模型》综述,20页pdf详述三种通用的扩散建模框架

工赋开发者社区

【MySQL进阶】事务一

六月暴雪飞梨花

MySQL 事务 9月月更 InnoDB存储引擎

[SpringBoot]SpringBoot整合第三方技术

十八岁讨厌编程

Java 后端 9月月更

云办公时代SaaS行业如何保证用户使用体验,提高用户留存率?

Baklib

SaaS 帮助文档

加速 Amazon RDS for MySQL 只读副本提升

亚马逊云科技 (Amazon Web Services)

MySQL RDS

链游版羊了个羊-SeedX,17号上线欢迎挑战

BlockChain先知

华为云快成长直播间云会议专场,华为员工都在用的高效办公神器

科技云未来

软件测试 | 测试开发 | 自动化测试与性能测试篇(附答案)

测吧(北京)科技有限公司

测试

实时云渲染 VS 本地渲染,全面横向对比

3DCAT实时渲染

边缘计算技术及其安全

阿泽🧸

边缘计算 9月月更

测试左移-快速玩转Debug

转转技术团队

问题排查 测试debug

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