使用java -XX:+PrintFlagsFinal
,我找到了TieredCompilation
标志,并在网上阅读了一些相关内容。
然而,我仍然不知道将其设置为false
时会发生什么。
我知道编译系统支持5个执行级别,基本上分为解释器、C1和C2:
- 级别0-解释器
- 级别1-C1具有完全优化(无剖析)
- 级别2-C1具有调用和回边计数器
- 级别3-C1具有完整剖析(级别2+MDO)
- 级别4-C2
两个问题:
(1) 通过设置-XX:-TieredCompilation
,是否有一些级别被禁用了?如果是,那么是哪些级别?
(2) 是否有一些标志可以决定是否禁用C1或C2,或者根本不编译?
-XX:-TieredCompilation
现在会(1.)禁用 C1 并始终编译到最大值(C2),还是(2.)根据 CPU 启发式地决定禁用哪个编译层次(如 @AlBlue 所述)?这也使我难以决定哪一个答案是正确的 :P - Markus Weninger