AOT 编译器

AOT (Ahead-Of-Time) 编译允许将 Java™ 类编译为本机代码以用于同一程序的后续执行。AOT 编译器与类数据共享框架协同工作。

AOT 编译器动态生成本机代码,而应用程序运行任何生成的 AOT 代码并将其高速缓存在共享数据高速缓存中。用于执行该方法的后续 JVM 可以从共享数据高速缓存装入和使用 AOT 代码,而不会导致 JIT 编译的本机代码遇到性能下降的问题。

缺省情况下,AOT 编译器为启用状态,但是只有在启用共享类时才处于活动状态。缺省情况下,共享类为禁用状态,因此不发生任何 AOT 活动。在 AOT 编译器处于活动状态时,该编译器会选择要进行 AOT 编译的方法,其主要目的是缩短启动时间。

注: 由于 AOT 代码在不同的程序执行中必须保持不变,所以 AOT 生成的代码的执行情况不如 JIT 生成的代码。 但 AOT 代码的执行情况通常优于解释的代码。

在不带 AOT 编译器或禁用 AOT 编译器的 JVM 中,JIT 编译器将选择性地将常用方法编译为优化的本机代码。因为 JIT 编译器在应用程序运行时运行,所以编译方法需要耗费时间成本。因为方法从解释开始并且大多数 JIT 编译在启动期间发生,因此可能会增加启动时间。

使用共享 AOT 代码来提供未经编译的本机代码,可以提高启动性能。从共享数据高速缓存装入方法的 AOT 代码并将其绑定到正在运行的程序,只需要少量的时间。相对于 JIT 编译器编译该方法所使用的时间,这个时间更短。

可以使用 -Xshareclasses 选项来启用共享类,如果启用了 AOT,那么还可能激活 AOT 编译器。