如果我使用-XX:+ UseG1GC标志运行以下代码,则每次运行cellSize_m变量将在循环内设置为0,并且我将获得“Now it is broken”打印输出。我在这里缺少什么?
public class BugTest
{
public static void main(String[] args)
{
fillArray(20);
}
public static void fillArray(double cellSize)
{
final double cellSize_m = cellSize;
Integer[] hemispheres = new Integer[565504];
for (int i = 0; i < 565504; i++)
{
hemispheres[i] = i;
if (cellSize_m == 0)
{
System.out.println("Now it's broken. Iteration: " + i + " " + cellSize_m);
}
}
System.out.println("Incrementing Cell Size " + (cellSize_m + 1));
}
}
我在Windows 7上使用64位Java 8 build 144。
答案 0 :(得分:1)
我去年报告了一个类似的错误JDK-8165766,但似乎甲骨文并不急于解决这个问题,因为优化问题导致G1GC在浮点计算上失败。