分层编译疑惑
老师,您好,能否讲一下什么情况下会触发哪一层的编译优化吗?或者说有没有相关的文章可以推荐看一下。看了下网上说的大部分都是以“随着时间推移,会选择某一层编译进行优化”一笔带过
36
收起
正在回答 回答被采纳积分+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. 多说一句,生产环境不建议随意调整这些参数,保持默认即可。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星