オブジェクトヘッダ
クラスoopDesc {
...
プライベート:
揮発性markOopの_mark。
組合_metadata {
クラース* _klass。
narrowKlass _compressed_klass;
} _metadata。
...
}
ホットスポットOOP(通常のオブジェクト・ポインタ)と呼ばれるオブジェクトポインタ、およびオブジェクトの構造にoopDescヘッドであります.. ポインタ外クラース(クラスはklassをC ++のキーワードと呼ばれているので、理由)に加えて,, ,,フィールドも_markを作ったので、クラスの情報オブジェクトに追加され、そしていくつかのオブジェクトは、年齢、GC、ロック状態として、情報を保持する必要がありますように。
_klassは_metadataの種類の組合で存在する、ユニオンタイプは、その最大のメンバーによって割り当てられた、このメモリは、フィールドで使用されるコードの解釈に依存します。
typedefのjuint narrowKlass。// typedefでのuint32_t juint。
typedefのクラスmarkOopDesc * markOop。
デフォルトの課金対象ヘッダ16バイト、(-XXスルー:+ UseCompressedClassPointers)オープンで圧縮されたオブジェクト・ポインタ、12バイトを占め、デフォルトで有効になっています。
オブジェクトのメンバー
- ロング/ダブル - 8つのバイト
- int型/フロート - 4つのバイト
- 短い/チャー - 2つのバイト
- バイト/ブール - 1つのバイト
- 参照タイプ - 4または8バイト
ヒープが32G未満の場合、圧縮はデフォルトのポインタで有効になって... JVMのための対応する制御パラメータ:-XX:+/- UseCompressedOops。
次のようにオブジェクトのメモリレイアウトに関連付けられているコマンドは次のとおりです。
(1)-XX:+ UseCompressedClassPointers。
(2)-XX:+/- UseCompressedOops。
(3)-XX:PrintFieldLayoutは、オブジェクトのメモリレイアウトを見ることができます。
(4)-XX:FieldsAllocationStyle =モードは、デフォルトモードは1です。
(5)-XX:+/- CompactFieldsキャビティーギャップが形成される充填するときに長い場合、アカウントの最初の12バイトに圧縮kclass指標を用いて、例えば、その後、8バイトアライメント要求長い、4つの中間があるので効率的に使用するためにバイトキャビティは、同時にJVM特性-XXのスイッチング制御を提供するためのオブジェクトが他に/ショート/バイトをint型比較的小さくすることができる:+/-デフォルトで有効になっCompactFields、。