使用 java -XX:+PrintFlagsFinal
我找到了 TieredCompilation
标志,我在网上阅读了一些相关内容。
但是,我仍然不知道将其设置为 false
时 究竟 会发生什么。
我知道编译系统支持5个执行级别,基本上分为解释器、C1和C2:
- 0 级 - 口译员
- 级别 1 - C1 完全优化(无分析)
- 级别 2 - 带有调用和后台计数器的 C1
- 级别 3 - 具有完整分析的 C1(级别 2 + MDO)
- 4 级 - C2
资料来源: http ://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/2b2511bd3cc8/src/share/vm/runtime/advancedThresholdPolicy.hpp#l34
两个问题:
(1) 通过设置 -XX:-TieredCompilation
,是否禁用了其中一些级别?如果是,哪个?
(2) 是否有一些标志来决定是禁用 C1 还是 C2,或者根本不编译?
原文由 Markus Weninger 发布,翻译遵循 CC BY-SA 4.0 许可协议
-XX:-TieredCompilation
禁用中间编译层(1、2、3),以便在最大优化级别(C2)解释或编译方法。作为副作用
TieredCompilation
标志还会更改编译器线程数、编译策略和默认代码缓存大小。请注意,禁用TieredCompilation
要禁用 C2 编译器并仅保留 C1 而没有额外开销,请设置
-XX:TieredStopAtLevel=1
。要禁用所有 JIT 编译器并在解释器中运行所有内容,请使用
-Xint
。