java jit循环展开政策?

问题描述 投票:0回答:2

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是否真的在循环中展开了循环,如果没有,那么为什么。

java optimization jit loop-unrolling
2个回答
6
投票

如果jvm展开循环,最好通过实际打印生成的汇编来回答循环。请注意,这需要您的代码实际上作为热点执行(即JVM认为它值得昂贵的优化)。 当JVM决定一种或另一种方法是一个更困难的问题,可能需要对JIT代码进行深入分析。

在运行代码时,在循环中查看是否在循环中执行循环展开的方法是指定为JVM词。

如果您有一个可执行的罐子,那么如何使用它的示例是:

1
投票
-XX:LoopUnrollLimit=1

这个旗帜威尔

带服务器编译器中间表示节点计数小于此值

这将直接解决您的问题,而无需查看生成的汇编

	

© www.soinside.com 2019 - 2024. All rights reserved.