G1垃圾收集导致变量值被重置?

时间:2017-08-10 16:20:30

标签: java garbage-collection g1gc

如果我使用-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。

1 个答案:

答案 0 :(得分:1)

我去年报告了一个类似的错误JDK-8165766,但似乎甲骨文并不急于解决这个问题,因为优化问题导致G1GC在浮点计算上失败。