2008-10-30 61 views
2

现在Java是开源的,我想要做的第一件事情之一是禁用数组边界检查某些代码块,在那里我肯定我无法离开,并且性能非常重要。现在如何禁用开源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。但我不在乎,因为我总是可以将重新编译的虚拟机与我的应用程序捆绑在一起。

我不知道如何去做这个不重要的改变,因此这个问题。请注意,我对JNI方法不感兴趣。

+0

我无法通过pre,也没有通过blockquote格式化上面的代码(3个for-loops)。对不起,眼下这是现在。 – user10955 2008-10-30 05:31:01

+0

@simonsharry,Greg Hewgill为你修复它。使用四个空格来表示代码。 – 2008-10-30 16:59:48

回答

2

如果你可以确定数组索引不能超出范围,也许编译器也可以,他们在静态数据流和最近的逃逸分析中变得非常有用。我会首先检查是否正在执行边界检查。 javap可以帮助你。

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