首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具体是-XX:-TieredCompilation做什么?

具体是-XX:-TieredCompilation做什么?
EN

Stack Overflow用户
提问于 2016-08-02 13:03:46
回答 3查看 40.2K关注 0票数 80

使用java -XX:+PrintFlagsFinal,我找到了TieredCompilation标志,并在网上读到了一些关于它的信息。

然而,当设置为false时,我仍然不知道会发生什么。

我知道编译系统支持5个执行级别,基本上分为解释器、C1和C2:

  • 0级-解释器
  • 级别1-完全优化的C1 (不进行分析)
  • 级别2-带有调用和backedge计数器的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,还是根本不编译?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-02 13:34:03

-XX:-TieredCompilation禁用中间编译层(1、2、3),以便在最大优化级别(C2)上解释或编译方法。

作为副作用,TieredCompilation标志还会更改编译器线程数、编译策略和默认代码缓存大小。请注意,在禁用TieredCompilation

  • 编译器线程将减少;
  • 选择简单的编译策略(基于方法调用和backedge计数器),而不是高级编译策略
  • 默认的保留代码缓存大小为5倍小

若要禁用C2编译器并使C1没有额外开销,请设置-XX:TieredStopAtLevel=1

若要禁用所有JIT编译器并在解释器中运行所有内容,请使用-Xint

票数 92
EN

Stack Overflow用户

发布于 2016-08-02 13:13:15

正如您已经注意到的,JIT有不同的级别(包括根本不运行JIT )。

在早期版本的Java中,您必须首先选择它们(例如-Xint-client-server),以便只使用解释器、只使用客户端(C1)编译器或服务器(C2)编译器运行。

随着Java 7的出现,分层编译意味着hotspot编译器可以无缝地在这些步骤之间进行转换。因此,在运行一定数量的代码之后,代码将使用C1编译,然后在运行更多之后,将使用C2进行编译。这是基于逐方法的方法,所以当应用程序运行时,很大一部分将在解释器下运行(这是用于冷代码的),然后在代码大量运行(热)之后,它将被编译成更好的性能。您可以通过运行

代码语言:javascript
运行
复制
$ java -XX:+PrintFlagsFinal -version | grep CompileThreshold
intx Tier2CompileThreshold                     = 0
intx Tier3CompileThreshold                     = 2000
intx Tier4CompileThreshold                     = 15000
openjdk version "1.8.0_92"
OpenJDK Runtime Environment (Zulu 8.15.0.1-macosx) (build 1.8.0_92-b15)
OpenJDK 64-Bit Server VM (Zulu 8.15.0.1-macosx) (build 25.92-b15, mixed mode)

-XX:-TieredCompilation本质上是TieredCompilation=false,意思是不要进行这种转换,您必须预先选择是使用客户机还是服务器编译器。JVM启发式地根据您的CPU决定应用哪种模式;如果您有多个处理器或64位VM,那么它将使用一个服务器VM (C2),否则它将使用客户机VM (C1)。

因此,-Xint将只与解释器一起运行(即没有编译器),您可以分别选择C1或C2与-client-server,以及-XX:-TieredCompilation

票数 25
EN

Stack Overflow用户

发布于 2018-06-13 02:15:51

作为Java 8的用户,建议禁用TieredComplilation,以便生产中使用浮点。

甲骨文不会在Java8上解决这个问题。所有热点JVM 8w/ G1GC都存在相同的问题。

(Bug1) (Bug2)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38721235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档