【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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:004641
用户头像

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

关注

评论

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

干货收藏|Clickhouse 常见问题及解决方案汇总

云智慧AIOps社区

MySQL 数据库 Clickhouse Data 故障处理

大专学历参加大数据培训可以吗

小谷哥

【面试题系列】CurrentHashMap的实现原理

颜淡慕潇

Java HashMap底层原理 面试题系列

KubeEdge云原生边缘计算公开课首发

华为云开发者联盟

云原生 后端 华为云 企业号十月 PK 榜

深圳前端开发培训机构学习该如何选择?

小谷哥

【网易云信】深度剖析「圈组」关系系统设计 | 「圈组」技术系列文章

网易智企

音视频 即时通讯IM

量化合约对冲交易机器人app系统开发案例

开发微hkkf5566

类和动态内存分配

Maybe_fl

软件测试面试真题 | 什么是PO设计模式?

测试人

软件测试 自动化测试 PO 测试开发 UI自动化测试

一文读懂加密资产板块的盈利潜力与投资机会

鳄鱼视界

Linux三剑客grep、sed、awk以及正则表达式

A-刘晨阳

Linux 运维 11月月更 三剑客

20款免费项目管理软件大盘点!你用过几款?

优秀

项目管理软件

Linux磁盘管理

A-刘晨阳

Linux 运维 磁盘 磁盘分区 11月月更

OpenMLDB 线上引擎资源需求预估模型,助你快速预估资源消耗

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

国内低代码开发平台有哪些作用?

优秀

低代码开发平台

OpenMLDB 新手宝典 开发者上手必读

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

OpenMLDB BUG 悬赏令

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

2022年10月中国汽车智能网联月度观察

易观分析

汽车 智能网联

深度剖析「圈组」关系系统设计 | 「圈组」技术系列文章

网易云信

音视频 即时通讯IM

服务器的正向代理与反向代理

我是一个茶壶

服务器 正向代理与反向代理 11月月更

Java NIO关键概念之Buffer

老农小江

Java 源码解读 java nio

前端性能优化常问面试题-防抖节流

肥晨

防抖 节流 防抖节流 前端面试题 11月月更

G1 垃圾收集器深入剖析(图文超详解)

mikechen的互联网架构

Java 架构 面试 G1垃圾回收器 11月月更

DTSE Tech Talk | 第9期:EiPaaS驱动企业数字化转型

华为云开发者联盟

云计算 后端 数字化转型 华为云 企业号十月 PK 榜

小巨人,大能量!融云成功入选国家级专精特新“小巨人”企业

融云 RongCloud

企业 IM RTC

ArrayList源码解析

Jeremy Lai

源码 ArrayList

赋能千行百业数字化转型,OpenHarmony生态新成果即将亮相HDC2022

OpenHarmony开发者

Open Harmony

活动预告 | 2022 SACC 中国系统架构师大会

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

Linux进程管理

A-刘晨阳

Linux 运维 进程 11月月更

大专学历参加大数据培训,学费多少?

小谷哥

Linux常用命令

我是一个茶壶

Linux 命令 11月月更

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