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。

目录
相关文章
|
11天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
40 11
|
20天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
58 7
|
2天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
20天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
1月前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
53 1
|
1月前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
38 7
|
1月前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
120 7
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
55 3
|
1月前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
21 2