JIT的循环展开政策是什么?或者,如果没有简单的答案,那么我可以在循环中检查循环展开的何时/何时检查?
GNode child = null;
for(int i=0;i<8;i++){
child = octree.getNeighbor(nn, i, MethodFlag.NONE);
if(child==null)
break;
RecurseForce(leaf, child, dsq, epssq);
}
基本上,我上面有一个代码,上面有静态数量的迭代(八),当我离开for循环时,它会很糟糕。但是,当我手动展开循环时,它的确会更好。我有兴趣找出JIT是否真的在循环中展开了循环,如果没有,那么为什么。
如果jvm展开循环,最好通过实际打印生成的汇编来回答循环。请注意,这需要您的代码实际上作为热点执行(即JVM认为它值得昂贵的优化)。 当JVM决定一种或另一种方法是一个更困难的问题,可能需要对JIT代码进行深入分析。
在运行代码时,在循环中查看是否在循环中执行循环展开的方法是指定为JVM的词。
如果您有一个可执行的罐子,那么如何使用它的示例是: