【发布时间】:2011-11-06 18:40:35
【问题描述】:
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的特定版本进行分析> 在特定平台上。我猜他们的“为什么”只能通过深入分析 JIT 代码来回答。
-
您遗漏了一个关键细节:您使用的是哪个 JVM?
-
@aioobe 它的 Java 热点 64 位,1.6.x
标签: java optimization compiler-construction jit loop-unrolling