java – HotSpot JIT内联策略:自顶向下还是从下到上

假设我们有3种方法方法2从方法1中调用,方法3由方法2调用.
方法2和3每个大小为30个字节码.另外,假设定义方法2总是从方法1调用一次,方法3总是从方法2调用一次.

如果方法2首先被内联,则方法3将从方法1的主体直接调用,并且可以轮流地内联.如果方法3首先插入到方法2中,则后者的大小将变为大约60个字节码,并且由于认的MaxInlinesize阈值是35字节码,因此它不能被内联.

在哪个顺序HotSpot JIT内嵌方法:自顶向下还是从下到上?

解决方法

MaxInlinesize影响至少执行一次但小于MinInliningThreshold次的方法的编译.对于超过MinInliningThreshold执行的方法,存在一个不同的设置-XX:FreqInlinesize = …具有更大的(依赖于平台的)认值.无论MaxInlinesize如何,热点仍然内联.您可以通过使用-XX运行应用程序来测试它:UnlockDiagnosticVMOptions -XX:PrintInlining -XX:MaxInlinesize = 0.它仍然会报告热点的内容(这些与评论“(热)”).只有以前报告的方法与“执行” MinInliningThreshold times“可能会使评论”太大“.如果您设置了FreqInlinesize,您可能会收到“热法太大”等评论.我从来没有看到他们的认设置.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...