分层编译疑惑

分层编译疑惑

老师,您好,能否讲一下什么情况下会触发哪一层的编译优化吗?或者说有没有相关的文章可以推荐看一下。看了下网上说的大部分都是以“随着时间推移,会选择某一层编译进行优化”一笔带过

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
大目 2020-07-13 20:51:13

您好,很棒的问题,看来是一位爱动脑筋,热爱技术的童鞋^_^

阈值如下:

Tier2CompileThreshold
Tier3CompileThreshold
Tier4CompileThreshold

课上没有列出每一层的阈值。但学到后面一些的章节,理论上,大家就会有能力自己查找出想要的JVM参数了。

比如,要想查找您问题中对应的JVM参数,步骤如下:

一、首先,使用java -XX:+PrintFlagsInitial |grep 关键词,获得关键词相关的JVM参数。如果是Windows,把grep换成findstr即可。

➜   java -XX:+PrintFlagsInitial |grep Tier
    uintx IncreaseFirstTierCompileThresholdAt       = 50                                  {product}
     bool PrintTieredEvents                         = false                               {product}
     intx Tier0BackedgeNotifyFreqLog                = 10                                  {product}
     intx Tier0InvokeNotifyFreqLog                  = 7                                   {product}
     intx Tier0ProfilingStartPercentage             = 200                                 {product}
     intx Tier23InlineeNotifyFreqLog                = 20                                  {product}
     intx Tier2BackEdgeThreshold                    = 0                                   {product}
     intx Tier2BackedgeNotifyFreqLog                = 14                                  {product}
     intx Tier2CompileThreshold                     = 0                                   {product}
     intx Tier2InvokeNotifyFreqLog                  = 11                                  {product}
     intx Tier3BackEdgeThreshold                    = 60000                               {product}
     intx Tier3BackedgeNotifyFreqLog                = 13                                  {product}
     intx Tier3CompileThreshold                     = 2000                                {product}
     intx Tier3DelayOff                             = 2                                   {product}
     intx Tier3DelayOn                              = 5                                   {product}
     intx Tier3InvocationThreshold                  = 200                                 {product}
     intx Tier3InvokeNotifyFreqLog                  = 10                                  {product}
     intx Tier3LoadFeedback                         = 5                                   {product}
     intx Tier3MinInvocationThreshold               = 100                                 {product}
     intx Tier4BackEdgeThreshold                    = 40000                               {product}
     intx Tier4CompileThreshold                     = 15000                               {product}
     intx Tier4InvocationThreshold                  = 5000                                {product}
     intx Tier4LoadFeedback                         = 3                                   {product}
     intx Tier4MinInvocationThreshold               = 600                                 {product}
     bool TieredCompilation                         = true                                {pd product}
     intx TieredCompileTaskTimeout                  = 50                                  {product}
     intx TieredRateUpdateMaxTime                   = 25                                  {product}
     intx TieredRateUpdateMinTime                   = 1                                   {product}
     intx TieredStopAtLevel                         = 4                                   {product}

二、对照 https://chriswhocodes.com (这个链接,在课程中有多次出现),输入参数,查询这些参数的含义。之后就知道答案啦。


PS. 多说一句,生产环境不建议随意调整这些参数,保持默认即可。


  • 提问者 G91 #1
    感谢老师又传授了一招,瞬间解开了白天的疑惑,赞
    2020-07-13 21:34:28
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师