当前位置: 首页 > 面试题库 >

Java JIT循环展开策略?

史高阳
2023-03-14
问题内容

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代码进行深入分析。



 类似资料:
  • 所以我的程序需要一种循环ArrayList类型。 关于它的唯一循环的事情是get(int index)方法,这是原始的: 我不能让它工作,因为我的班级看不到它,因为它是私人的。 另外,我不想为此使用任何外部库,因为我认为没有适合我需要的库,因为我不想要一个真正的circularArray,而只想要它的一部分功能,其余部分是常规的ArrayList。 所以我有两个问题:

  • 在C语言中,我有一个任务,我必须做乘法、求逆、移位、加法等,用巨大的矩阵分配为二维数组(数组的数组)。 我找到了gcc标志。如果我理解正确,这将自动展开所有循环,而无需程序员进行任何努力。 我的问题是: a) gcc是否包括这种带有各种优化标志的优化,如,等。? b)我必须在我的代码中使用任何s来利用循环展开,还是自动识别循环? c)如果展开提高了性能,为什么默认情况下不启用此选项? d) 为了以

  • 我有一个关于C编译器优化以及内联函数中的循环何时/如何展开的问题。 我正在开发一个数字代码,它可以完成下面的示例。基本上,将计算某种模具,并调用包装

  • 是否有一种方法可以指示GCC(我使用的是4.8.4)完全展开底部函数中的<code>循环,即剥离该循环?循环的迭代次数在编译时是已知的:58。 让我先解释一下我所做的努力。 通过检查GAS输出: 使用了12个寄存器XMM0 - XMM11。如果我将标志< code>-funroll-loops传递给gcc: 循环只展开两次。我检查了GCC优化选项。GCC说也会打开,所以当GCC展开循环时,它在寄存

  • 我想做的是创建一个租车计算器。这已经为三辆不同的汽车预装了每日费用和燃油费。我想在所有东西上加6%的销售税。用户的输入决定了总数等。。 完整项目详细信息:[https://www.scribd.com/document/392038034/Bob-s-Car-Rental-Intermediate-pdf] {我的代码当前} 在输入租用的天数后,我希望用户能够被提升,如果他们想计算另一辆车。当我尝