2008-10-30 56 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的建議,不提前優化,並且您已經測量了您的應用程序,並確定此差異值得花費時間。如果是這樣,請發佈結果摘要,因爲這對我來說很有意思。即使我的應用程序不會從這種調整中受益。