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

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

时间: 2024-09-18 16:16:15

OpenJDK HotSpot或将在Java 9带来预编译技术的相关文章

谈谈JAVA程序的反编译

编译|程序   谈谈JAVA程序的反编译  如今JAVA语言在全世界范围正如火如荼般的流行,它广范地应用在INTERNET的数据库.多媒体.CGI.及动态网页的制作方面.1999年在美国对JAVA程序员的需求量首次超过C++! 最近分析一些JAVA程序,对JAVA的反编译进行了一番了解,下面将我所了解的情况作以下介绍,希望对JAVA爱好者有所帮助. JAVA是采用一种称做"字节编码"的程序结构,分为小程序(嵌入到HTML文件中)和应用程序(直接在命令状态下执行)两种类型.无论哪种结构,

java软件安装问题-java程序能通过编译却运行成功

问题描述 java程序能通过编译却运行成功 public class helloworld { public static void main(String[] args) { System.out.println("helloworld!"); } } 我是一个初学者,之前卸载了这个软件 现在又重新安装后,完成环境配置: 在dos里通过编译却不能运行,好像是环境配置出来问题 但是由于配置次数太多搞得很凌乱不知道哪出错了, 希望大家可以帮帮我的忙 今天就想配置好,尝试着用java软件.

kafka linux下java客户端的详细编译步骤

问题描述 kafka linux下java客户端的详细编译步骤 求关于kafka在Linux 命令行下的java客户端详细编译步骤,网上直看到些程序代码但是具体编译过程很少

java本地编译技术-[Java本地编译技术] Excelsior JET

问题描述 [Java本地编译技术] Excelsior JET 大神们,都说 Excelsior JET 这个软件可以高效的将Javs的字节码编译成本地机器码,可是这个软件是收费的,有木有人能给个注册机或者同等作用的编译器!

class文件-Java在CMD上编译如何生成CLASS文件

问题描述 Java在CMD上编译如何生成CLASS文件 解决方案 javac java文件路径 如D:/test.java javac D:/test.java 需要配置好环境变量 解决方案二: 进入文件所在的路径,最好将文件在具体的盘里(如F盘),不要在桌面上. 进入文件所在的盘里 然后javac file.java 运行class文件 java file,不要带后缀".class" 解决方案三: java c + .java文件 解决方案四: 配好CLASSPATH环境变量,如:

java web 在线预可以直接预览word

问题描述 java web 在线预可以直接预览word java web 在线预可以直接预览word,在不转换成swf的情况下.... 解决方案 之前看人用过一个ntko,可以在线编辑word 解决方案二: 用虚拟打印软件,然后变成图像,或者poi读取转换.

jasper-ireport,在java工程中预览PDF,被识别为文件下载

问题描述 ireport,在java工程中预览PDF,被识别为文件下载 Class.forName(driver).newInstance(); Connection conn = DriverManager.getConnection(host, user, pass); Map parameters = new HashMap(); parameters.put("SUBREPORT_DIR", reportFilePath); if (para != null &&

【IOS-COCOS2D-X 游戏开发之十三】详细讲解在XCODE中利用预编译并通过JNI调用ANDROID的JAVA层代码(COCOS2DX里访问调用ANDROID函数)!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/725.html 很多看过之前Himi的[iOS-cocos2d-X 游戏开发之七]整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可! 博文的童鞋都在问我如何在Xcode中能调用Java的函数,比如在Android端需要加入广告.支付.等第三方平台或者

联网时代带来不仅仅是技术上的革命

联网时代带来不仅仅是技术上的革命,给我们的日常生活也带来实实在在的改变.理论上,来自全世界的消息,新闻以及评论我们都可以通过点击鼠标轻松浏览.但是如果要准确的找到所要的东西并非易事.学会充分利用搜索网站,也许你才可以互联网上变成一个真正的"冲浪者". 在全世界数以十亿计的网页面前,不少人会感到迷茫.根据AOL(美国在线服务公司,是美国最大因特网服务提供商之一)的最新研究表明,有一半以上的英国互联网用户承认他们在海量的网络信息中"迷失".对于许多人来说,他们的网络历程