50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

OpenJDK HotSpot 或将在 Java 9 带来预先编译技术(AOT)

  • 2016-10-10
  • 本文字数:1647 字

    阅读完需:约 5 分钟

在“什么是即时编译(JIT)!?OpenJDK HotSpot VM 剖析”这篇文章里,作者提到HotSpot 执行引擎有一个即时(JIT)编译器。为了优化启动时间,分层编译先对代码进行解释,然后把它们快速移动到第1 层,第2 层和第3 层,在这些层里使用客户端编译级别对它们进行编译(使用不同的剖析信息),最后把它们移动到服务端编译级别的层(更多信息可以参考上面的文章)。尽管有编译阶段的优化,HotSpot 仍然会先解释执行字节码,然后才会使用即时编译。

今年9 月,一个关于在HotSpot 里添加预先编译(Ahead-of-Time,AOT)的提案被提交到JEP。AOT 通过加载预编译的类来优化启动时间,避免了在解释模式或局部优化编译级别运行这些类。

AOT 并非新出现的动态编译器技术。 IBM 的 J9 虚拟机就支持 AOT Excelsior JET 和其它一些虚拟机也支持。AOT 使用(共享)已经编译成本地代码的库让动态编译器达到更好的启动 / 预热效果。

跟 JIT 编译器类似,AOT 编译也有分层和非分层两种模式,不同之处在于剖析信息和 JIT 再编译。那篇文章提到,在分层模式下,编译第2 层会收集简单的剖析信息,AOT 分层编译的代码也是如此。当AOT 调用达到一定阈值,这些方法会在第3 层被客户端编译器编译,这也为将在第4 层发生的服务端再编译收集了全部剖析信息。

该提案由HotSpot 团队负责人Valdimir Kozlov 提交,里面提到了在第一个版本里只有java.base 模块支持多层AOT,因为这个基本模块为众人所知,可以得到全面的内部测试。

AOT 带来了一个叫作“jaotc”的工具,它在内部使用了 Graal (用于生成代码)。Graal 动态编译器集成了 HotSpot 虚拟机并且依赖 JVM 编译器接口(JVMCI),所以 JDK(支持 Graal 或 AOT)应该也支持 JVMCI。 Oracle technetwork 网站上就有一些支持 JVMCI 的 JDK 版本。

根据提案的描述,jaotc 工具支持以下这些标记:

复制代码
--module <name> Module to compile
--output <file> Output file name
--compile-commands <file> Name of file with compile commands
--compile-for-tiered Generated profiling code for tiered compilation
--classpath <path> Specify where to find user class files
--threads <number> Number of compilation threads to be used
--ignore-errors Ignores all exceptions thrown during class loading
--exit-on-error Exit on compilation errors
--info Print information during compilation
--verbose Print verbose information
--debug Print debug information
--help Print this usage message
--version Version information
-J<flag> Pass <flag> directly to the runtime system
</flag></flag></number></path></file></file></name>

产品级的 JVM 有如下标记:

复制代码
+/-UseAOT - Use AOT-compiled files
+/-PrintAOT - Print used AOT klasses and methods
AOTLibrary=<file> - Specify the AOT library file
</file>

一些非产品级或用于开发的标记对用户也是可用的:

复制代码
PrintAOTStatistics - Print AOT statistics
UseAOTStrictLoading - Exit the VM if any of the AOT libraries has invalid config

提案同时提到,AOT 的运行时事件日志将集成统一 GC 日志,并支持如下标签:

复制代码
aotclassfingerprint
aotclassload
aotclassresolve

不列出风险或没有基本假定的提案是不完整的,AOT 也不例外。AOT 提案的风险标注如下:

预编译的代码可能不是最优的,所以会导致性能损失。性能测试结果表明,有些应用程序会从 AOT 编译的代码中获益,不过有些却出现明显的性能衰退。因为 AOT 特性是可选的,所以应用程序出现的性能衰退是可以避免的。如果用户发现应用程序启动变慢,或者达不到预期的性能峰值,那么可以重新构建一个不包含 AOT 库的 JDK。

查看英文原文: Ahead-of-Time (AOT) Compilation May Come to OpenJDK HotSpot in Java 9


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-10-10 19:005406
用户头像

发布了 322 篇内容, 共 157.5 次阅读, 收获喜欢 148 次。

关注

评论

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

踩过坑后,我发现了这几个运维神器

外滩运维专家

网站监控 免费SSL证书 监控电话 短信接口 免费监控

DiskCatalogMaker for Mac 磁盘管理工具

晨光熹微

万界星空科技锂电池MES解决方案

万界星空科技

mes 锂电池 新能源电池 制造业转型 锂电池mes

告别工具混战!TitanIDE,AI 开发者的全流程研发加速器

行云创新

模型开发训练 Cloud IDE TitanIDE 云端 IDE

Couchbase 可观测性最佳实践

观测云

couchbase

Trickster for Mac 快速访问文件工具

晨光熹微

javax.security.auth.login.LoginException: Message stream modified (41)

刘大猫

人工智能 数据挖掘 算法 数据分析 LoginException

统一多模态 Transformer 架构在跨模态表示学习中的应用与优化

申公豹

人工智能

云文档系统(源码+文档+讲解+演示)

深圳亥时科技

高德地图开放平台世界地图服务全新上线

高德开放平台

前端 高德地图 地图服务 海外应用 世界地图服务

【7.23 直播】手把手教你零基础玩转 IoTDB 时序大模型!

Apache IoTDB

低代码演进:从辅助工具到核心引擎,驱动企业关键业务数智化升级

量贩潮汐·WholesaleTide

低代码

Playwright自动化测试系列课(3) | 第二阶段:核心技能与调试 ​​交互操作大全

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

Golang基础笔记十三之context

Hunter熊

Go 后端 Context 超时控制 传递数据

回顾Meltdown与Spectre漏洞披露事件:风险与启示

qife122

漏洞披露 侧信道攻击

Room Arranger for Mac 简单易用的室内设计软件

晨光熹微

为什么这些SQL语句逻辑相同,性能却差异巨大?

电子尖叫食人鱼

数据库 sql

腾讯云GooseFS团队与厦门大学合作成果 AC-Cache入选 PPOPP

极客天地

腾讯云AIoT 2.0产品解决方案全面升级,一站式智能终端开发新范式

极客天地

基于YOLOv8的太阳能电池片缺陷检测项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

在AI时代,挖掘用户真实需求比技术实现更具挑战性

qife122

开源项目 需求分析

Master of Typing 3 for Mac 打字大师 专业的打字练习软件

晨光熹微

右键菜单增强工具专业版 Mouseboost Pro for mac

晨光熹微

多功能代码编辑器BBEdit for Mac

晨光熹微

案例速击!TitanIDE 凭硬核实力斩获多行业标杆合作

行云创新

CloudIDE 云端 IDE

2015年漏洞实验室课程公告 - CanSecWest与SyScan技术研讨会

qife122

漏洞利用 内核漏洞 内核漏洞模糊测试

PDF文件压缩软件 Recompress for Mac

晨光熹微

开源对话式 AI 平台 Intervo:支持电话、语音、聊天多渠道;Runway 发布新动捕模型,支持唇同步和复杂动作捕捉丨日报

声网

【Spring三级缓存解密】如何优雅解决循环依赖难题

不在线第一只蜗牛

spring

鸿蒙开发中与 AI 编码助手的共处之道(ArkTS 视角)

谢道韫

Bettertouchtool for Mac 触控板增强软件

晨光熹微

OpenJDK HotSpot或将在Java 9带来预先编译技术(AOT)_Java_Monica Beckwith_InfoQ精选文章