12

java.nio.DirectByteBuffer クラスのソースコードを見ると、次のことがわかりました。

if ((length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) ....

長さをゼロビットシフトする目的は何ですか? これは、パフォーマンスの最適化か何か他のものでしょうか?

4

3 に答える 3

17

私はそれを解決したと思います。

クラスJavaDocsで:

// -- This file was mechanically generated: Do not edit! -- //

したがって、ハンドコーディングではありません。これはスクリプトで生成されたものであり、スクリプト作成者はビット シフト量がゼロの場合の最適化を追加していません。

于 2012-05-11T14:31:38.493 に答える
3

やることi << 0はノーオペレーションです。と同じに評価されiます。

于 2012-05-11T14:23:59.220 に答える
2

i << 0明らかに冗長です。Java プログラマーがこのコードを意図的に書く正当な理由はありません。

このコードは次のようになります。

  • 何も考えていない人が書いた、
  • <<オペレーターが何をするかを理解していない人によって書かれた、
  • 半機械的なリファクタリングの結果、または
  • もともとはある種のコード ジェネレーターまたはトランスレーターによって生成されました。

ただし、バイトコードまたは JIT コンパイラーがこれを最適化するか、いずれにしてもパフォーマンスに大きな影響を与えない可能性は十分にあります。

于 2012-05-11T14:37:41.003 に答える