有关 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 编译器会停止编译所有方法,以避免耗尽系统内存或影响应用程序或操作系统的稳定性。
从 z/OS® V2R3开始,缺省情况下会启用 64 位应用程序 (RMODE64) 的驻留方式。 此功能允许 JIT 分配高于 2 GB 内存线的代码高速缓存。 您可以通过在命令行上指定 -Xjit:disableRMODE64 子选项来禁用此 JIT 行为。