有关 JIT 编译器的常见问题及解答

有关主题的解答,如禁用 JIT 编译器、使用备用 JIT 编译器、控制 JIT 编译和动态控制 JIT 编译器。

我可以禁用 JIT 编译器吗?
是。 缺省情况下,JIT 编译器处于启用状态,但是您可以通过相应的命令行参数来禁用它。 有关更多信息,请参阅 禁用 JIT 或 AOT 编译器
我可以使用另一家供应商的 JIT 编译器吗?
编号
我可以将任一版本的 JIT 编译器用于 JVM 吗?
编号 这两者紧密地结合在一起。 必须使用随您使用的 JVM 软件包一起提供 JIT 编译器版本。
JIT 编译器可以反编译方法吗?
通常,JIT 编译器不会反编译方法。 但是,在极少数情况下,将强制 JIT 编译器对方法进行反编译。 如果 JIT 编译器基于编译时假设应用推测性优化、随后违反了假定并且 JIT 编译器随后无法重新编译该方法,那么会出现此类情况。 由于实施限制,此类方法在应用程序结束前进行解释。
我可以动态控制 JIT 编译器吗?
编号 您可以将选项传递给 JIT 编译器以修改此行为,但只能在 JVM 启动时进行,因为 JIT 编译器是与 JVM 同时启动的。 但是, Java™ 程序可以使用 java.lang.Compiler API 在运行时启用和禁用 JIT 编译器。
代码高速缓存要消耗多少内存?
JIT 编译器智能地使用内存。 在初始化代码高速缓存时,它使用的内存相对较少。 在将更多方法编译为本机代码时,代码高速缓存将会动态增长以适应程序的需求。 将会回收和复用先前由丢弃的或重新编译的方法占用的空间。 在代码高速缓存的大小到达预定义的最大限制时,将停止增长。 然后,JIT 编译器会停止编译所有方法,以避免耗尽系统内存或影响应用程序或操作系统的稳定性。 服务更新 5 更改开始从 z/OS® V2R3开始,缺省情况下会启用 64 位应用程序 (RMODE64) 的驻留方式。 此功能允许 JIT 分配高于 2 GB 内存线的代码高速缓存。 您可以通过在命令行上指定 -Xjit:disableRMODE64 子选项来禁用此 JIT 行为。服务更新 5 更改结束