Для HotSpot:
Заголовок объекта состоит из знака слова и Klass указатель.
знак слово имеет размер слова (4 byte
на 32 битных архитектур, 8 byte
на 64 битных архитектур) и
в Klass указатель имеет размер слова на 32 bit
архитектур. На 64 bit
архитектуры указателя klass либо имеют размер слова, но также могут иметь 4 byte
, если адреса кучи могут быть закодированы в этих 4 bytes
.
Эта оптимизация называется «сжатый oops», и вы также можете управлять им с помощью опции UseCompressedOops
.
Вы также можете найти запись в вики об этом 1.
знак слова фактически используется для многих вещей.
- Первый:
Biased Locking
2, через который HotSpot может реализовать эффективную блокировку.
- Он также используется во время
GC to set forward pointers
и to store the age of the objects
. Идентификационный код хэша объекта может быть сохранен внутри метки (/Object.hashCode
).
Существует комментарий в исходном коде markOop.hpp, который описывает расположение в зависимости от архитектуры:
// 32 bits:
// --------
// hash:25 ------------>| age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:23 epoch:2 age:4 biased_lock:1 lock:2 (biased object)
// size:32 ------------------------------------------>| (CMS free block)
// PromotedObject*:29 ---------->| promo_bits:3 ----->| (CMS promoted object)
//
// 64 bits:
// --------
// unused:25 hash:31 -->| unused:1 age:4 biased_lock:1 lock:2 (normal object)
// JavaThread*:54 epoch:2 unused:1 age:4 biased_lock:1 lock:2 (biased object)
// PromotedObject*:61 --------------------->| promo_bits:3 ----->| (CMS promoted object)
// size:64 ----------------------------------------------------->| (CMS free block)
//
// unused:25 hash:31 -->| cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && normal object)
// JavaThread*:54 epoch:2 cms_free:1 age:4 biased_lock:1 lock:2 (COOPs && biased object)
// narrowOop:32 unused:24 cms_free:1 unused:4 promo_bits:3 ----->| (COOPs && CMS promoted object)
// unused:21 size:35 -->| cms_free:1 unused:7 ------------------>| (COOPs && CMS free block)
Вы также можете найти файл заголовка here уп.
"OOP" означает * указатель обычный объект * – user2418306