栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JVM如何决定JIT编译方法(将方法分类为“hot”)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JVM如何决定JIT编译方法(将方法分类为“hot”)?

HotSpot编译策略相当复杂,尤其是对于分层编译而言,它在Java 8中是默认启用的。它既不是执行次数,也不是

CompileThreshold
参数。

最佳解释(显然是唯一合理的解释)可以在HotSpot源中找到,请参阅advancedThresholdPolicy.hpp。

我将总结此高级编译策略的要点:

  • 执行从第0层(解释器)开始。
  • 编译的主要触发因素是
  • 方法调用计数器i;
  • 后柜台b。向后分支通常表示代码中的循环。
  • 每次计数器达到一定的频率值

    (TierXInvokeNotifyFreqLog,TierXBackedgeNotifyFreqLog)
    ,编译政策被称为决定下一步与当前正在运行的方法做什么。取决于的值i,b而C1和C2的编译器线程的当前负载,可以决定

  • 继续在解释器中执行;

  • 开始分析翻译;
  • 在第3层使用C1编译方法,并提供进一步重新编译所需的完整配置文件数据;
  • C1在第2层的编译方法,没有概要文件,但有可能重新编译(不太可能);
  • 最后在没有配置文件或计数器的第1层使用C1编译方法(也不可能)。
    这里的关键参数是

    TierXInvocationThreshold
    TierXBackEdgeThreshold
    。可以根据编译队列的长度为给定方法动态调整阈值。

  • 编译队列不是FIFO,而是优先级队列。

  • 具有概要数据(第3层)的C1编译代码的行为类似,不同之处在于切换到下一个级别(C2,第4层)的阈值要大得多。例如,大约200次调用后,解释的方法可以在第3层进行编译,而经过5000次调用后,C1编译的方法将在第4层进行重新编译。

  • 特殊策略用于方法内联。即使它们不是“热”的,它们也可以内联到调用方中。只有频繁调用()时

    InlineFrequencyRatio
    ,才可以内联更大的方法
    InlineFrequencyCount



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451949.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号