当前位置: 首页 > 知识库问答 >
问题:

JVM如何决定JIT编译一个方法(将一个方法归类为“热”)?

白子昂
2023-03-14

我已经使用过-xx:+printcompility,并且我知道JIT-编译器的基本技术以及为什么使用JIT-编译。

然而,我仍然没有发现JVM是如何决定JIT编译一个方法的,即“当正确的时间到来时JIT编译一个方法”。

(2)JVM如何将方法分为“非热”和“热”方法?执行次数?还要别的什么吗?

(3)如果“hot”方法有特定的阈值(如执行次数),是否有Java标志(-xx:...)来设置此阈值?

共有1个答案

蓝苗宣
2023-03-14

热点编译策略相当复杂,特别是对于分层编译,在Java8中,分层编译是默认的。这既不是执行次数,也不是compilethreshold参数的问题。

最好的解释(显然,唯一合理的解释)可以在热点源中找到,参见AdvancedThresholdPolicy.hpp。

我总结一下这个高级编译策略的要点:

    null
    null

带有配置文件数据的C1编译代码(第3层)的行为类似,只是切换到下一层(C2,第4层)的阈值要大得多。例如。一个解释的方法可以在大约200次调用后在第3层编译,而C1-compiled方法可以在第4层在5000次以上调用后重新编译。

 类似资料:
  • 我已经使用过,我知道JIT-compiler的基本技术以及为什么要使用JIT-compilization。 然而,我仍然没有发现JVM是如何决定JIT编译一个方法的,即“当合适的时间来JIT编译一个方法时”。 我假设每个方法都开始被解释,只要它不被归类为“热方法”,它就不会被编译,这是对的吗?我在后脑勺上读到,当一个方法被执行至少10.000次(在解释该方法10.000次后,它将被编译)时,它被认

  • 问题内容: 我已经使用,并且我知道JIT编译器的基本技术以及为什么使用JIT编译。 但是我仍然没有找到JVM如何决定JIT编译方法的方法,即“何时到了JIT编译方法的正确时间”。 我假设每个方法都开始被解释,并且只要它不被归类为“热方法”,就不会被编译,这是对的吗?我脑海里有些东西我读到,当一个方法执行至少10.000次(解释该方法10.000次后,将被编译)时,该方法被视为“热”,但我必须承认不

  • 问题内容: 在Python中,该类充当所有(新样式)类的根超类。至少默认情况下,将和应用于的任何子类的“类实例”会产生相同的结果: 我想定义一个的子类,例如,它在每种方式上都是相同的,除了对自身和产生不同的输出: 有没有办法在Python中做到这一点? PS:我知道特殊的方法,但是据我了解,如果类重写,则仅当在的实例上调用时才调用覆盖方法,而不是在自身上调用时。即: 问题答案: 实际上,与对象实例

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 问题内容: 我想将特定类的每个方法包装在python中,并且希望通过最少地编辑该类的代码来实现。我应该怎么做? 问题答案: Michael Foord的Voidspace博客的一个条目中介绍了一种优雅的实现方法,该条目在“方法修饰元类的方法”部分中介绍了什么是元类以及如何使用它们。稍微简化一下,然后将其应用于您的情况会导致以下结果: 在Python中,函数/方法装饰器只是函数包装器和一些语法糖,以