lev*_*tov 13 java jit inline jvm-hotspot
假设我们有3种方法:从方法1调用方法2,从方法2调用方法3.方法2和3各自大小为30字节码.另外,假设确定性方法2总是从方法1中恰好调用一次,并且方法3总是从方法2中调用一次.
如果方法2首先被内联,则方法3将直接从方法1的主体调用,并且可以依次内联.如果方法3首先内联到方法2中,则后者的大小将变为大约60个字节码,并且不能内联,因为默认MaxInlineSize阈值是35个字节码.
HotSpot JIT以哪种顺序内联方法:自上而下或下至上?
Hol*_*ger 19
该MaxInlineSize方法汇编执行至少一次,但少于影响MinInliningThreshold只次.对于执行的方法,MinInliningThreshold有一个不同的设置-XX:FreqInlineSize=…具有更大(平台相关)的默认值.无论如何,热点仍然是内联的MaxInlineSize.您可以通过运行应用程序来测试它-XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining -XX:MaxInlineSize=0.它仍将报告热点的内联(这些与评论"(热)").只有以前报告为注释"执行<MinInliningThreshold times"的方法可能会使注释"太大".如果你设置了FreqInlineSize你可能会收到像"hot method too big"这样的评论.我从未在默认设置下看到它们.
| 归档时间: |
|
| 查看次数: |
2781 次 |
| 最近记录: |