ホームページ >Java >&#&チュートリアル >ArrayBlockingQueue がパフォーマンスの最適化のためにローカル最終変数を使用するのはなぜですか?
ArrayBlockingQueue: パフォーマンス最適化のためのローカル最終変数
ArrayBlockingQueue クラスでは、特定のメソッドがメンバー フィールドを前にローカル 最終変数にコピーしていることがわかります。重要な操作を呼び出します。
の場合たとえば、offer() メソッド内:
public boolean offer(E e) { ... final ReentrantLock lock = this.lock; lock.lock(); ... }
ここでは、this.lock がローカル変数 lock にコピーされます。この手法は、extract() メソッドの E[] 項目など、他のメンバー フィールドにも適用されます。
メンバー フィールドが既に Final として宣言されている場合、これらのローカル コピーの必要性を疑問視する人もいるかもしれません。ただし、微妙なパフォーマンスの最適化が行われています。
このクラスの作成者である Doug Lea 氏によると、ローカル変数にコピーすると、生成されるバイトコードが小さくなります。低レベル コードの場合、この最適化により、特に頻繁に呼び出されるメソッドのメンバー フィールドの取得と使用に関連するオーバーヘッドをわずかに削減できます。
core-libs-dev メーリング リストのスレッドで述べられているように、この最適化は "生成されるバイトコードは最小であり、マシンに少し近いコードを書くのは良いことです。」
以上がArrayBlockingQueue がパフォーマンスの最適化のためにローカル最終変数を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。