分层编译疑惑

来源:1-4 编译器优化机制详解

G91

2020-07-13 08:26:09

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

写回答

1回答

大目

2020-07-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. 多说一句,生产环境不建议随意调整这些参数,保持默认即可。


0
h91
h 感谢老师又传授了一招,瞬间解开了白天的疑惑,赞
h020-07-13
共1条回复

Java架构师-技术专家

千万级电商项目从0到100全过程,覆盖Java程序员不同成长阶段的核心问题与解决方案

2672 学习 · 5839 问题

查看课程