2

既然 Java 是开源的,我想做的第一件事就是禁用数组边界检查某些代码块,我很确定我不能越界并且性能很重要。

现在,我不是编译器/语法专家,所以任何语法对我来说都足够好:这是我能想到的:

pragma_disable_array_bounds_checking_begin
  for(x = xMin; x < xMax; x += xIncr) {
    for(y = yMin; y < yMax; y += yIncr) {
      for(z = zMin; z < zMax; x += zIncr) {
        sample_and_draw(voxel[x][y][z]);
      }
    }
  }
pragma_disable_array_bounds_checking_end

我了解在此更改后,我的本地版本将不再是 Java。但我不太在意,因为我总是可以将重新编译的 VM 与我的应用程序捆绑在一起。

我不知道如何进行这种不平凡的改变,因此提出了这个问题。请注意,我对 JNI 方法不感兴趣。

4

1 回答 1

1

如果您能判断出数组索引不能超出范围,也许编译器也可以,它们最近在静态数据流和逃逸分析方面令人印象深刻。我会先检查是否正在执行边界检查。javap 可以在这里为您提供帮助。

当然,我假设您遵循 Knuth 的建议,不要过早优化,并且您已经测量了您的应用程序并确定这种差异值得花时间研究。如果是这样,请发布您的结果摘要,因为这对我来说非常有趣。即使我的应用程序不会从这种调整中受益。

于 2008-10-30T05:37:21.063 回答