2

Java がオープン ソースになった今、私が最初にやりたいことの 1 つは、特定のコード ブロックの配列境界チェックを無効にすることです。

さて、私はコンパイラ/文法の専門家ではないので、どのような構文でも十分です。

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 に答える