起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > OpenJDK HotSpot或将在Java 9带来预先编译技术

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

时间:2016-10-10 22:17:18来源:编程网 作者:IT培训网 已有: 名学员访问该课程

  快捷搜索:java技术编译技术

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

在“什么是即时编译(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  Module to compile

--output  Output file name

--compile-commands  Name of file with compile commands

--compile-for-tiered Generated profiling code for tiered compilation

--classpath  Specify where to find user class files

--threads  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 Pass  directly to the runtime system

产品级的JVM有如下标记:

+/-UseAOT            - Use AOT-compiled files

+/-PrintAOT          - Print used AOT klasses and methods

AOTLibrary=    - Specify the AOT library 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。

文章出自:http://qh.itpxw.cn/peixun/software/201636475.html

文章标题:OpenJDK HotSpot或将在Java 9带来预先编译技术



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:IT培训网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容