Biased Lockingのパフォーマンス効果

Java6ではデフォルトでBiased Lockingが組み込まれています。


Biased Lockingとは同一のスレッドからのロック取得コストを低減させる仕組みです。


通常はスレッド中のオブジェクトの状態として、非ロック状態とロック状態を持つ。
その他、GC回収待ち状態などもあるが、基本的には非ロックとロック状態があります。


非ロック状態からロック状態に遷移するために高いコストがかかります。
バイトコードのロック取得用命令がコストが高い。そのため、このロック取得命令の生成を削減することによってパフォーマンス向上を見込む。


バイアスロックは非ロック状態をさらに細かく制限するためにフラグを付加しバイアス状態と非バイアス状態を設けます。
※このバイアス状態の大元は非ロック状態ですので、バイトコードでのロック取得命令は生成されません。


バイアス状態を設け、このバイアス状態によってロック取得可否が判別できるような場合では
ロック取得命令を生成せずに済むためパフォーマンス向上が期待できます。


一例として同一スレッドから何度も(ループ中から)同期メソッドを呼び出す場合に効果が期待できます。