ロック原則
Javaのオブジェクト構造
Javaオブジェクト・インスタンスは、図4(b)ビットと整列されるオブジェクトヘッダとデータ、前記オブジェクトヘッダ12Bを含みます
オブジェクトヘッダ(12B)
これは、マーク・ワードとのklassのポインタが含まれています
- マークワードがロック情報、ハッシュコード、GC情報(64ビット、8B)
- klassポインタポインタ指定されたオブジェクトのメタデータ(32ビット、4B)
makrワード
- 情報のハッシュコードを格納するための図7(b)
- 最初のバイト8店舗世代の年齢は、ステータス情報およびオブジェクトをロックバイアス
1ビットが使用されていません | 3ビット世代年齢 | 1ビットバイアスされたロックフラグ | 1ビットのオブジェクトのステータス |
---|
- いいえロック状態いない
シングルスレッドの場合は、同期ブロックのロックまたは手動で何がないロック状態と、存在しません - バイアスされ、ロック
時に一つだけのスレッド同期コードの呼び出しをブロックするには、それがロックされた状態に入る傾向があります
が、理由の偏ったロック遅延、または全くロック状態時々あり
遅延をロックすると、JVMで開始する予定で、多くのリソースがあるだろう偏って存在し、 + UseBiasedLocking --XX:BiasedLockingStartupDelay =とほとんど絶えずリリースロックから非常に無駄なバイアスされ、そのXXによってバイアス遅延(約4000ミリ秒)、ロックされたヘビー級のロックを必要と 0 バイアスされ、ロックをオフにします遅れて
一度だけバイアスされ、ロックバイアス状況を、しかし再度追加クラスの軽量ロックの同じバッチをロック偏った排除するために、JVMを再バイアスされる
終了偏ったロック同期ブロックまたは偏ったロック後 - 軽量ロック
出口は軽量シンクブロックをロックはロックなしの状態で復元されています