Skip to content

Instantly share code, notes, and snippets.

Заголовок Java-объекта, действительно, состоит из 2х (4 байтовых для х32 и 8 байтовых для х64) слов. 4+4 = 8 байт и 8 + 8 =16 байт – размер хэдера.
Первое — markOop — многофункциональное хранилище разнообразной информации об объекте.
В зависимости от ситуации может содержать
— хеш-код объекта;
— возраст (количество пережитых GC);
— lock (обычный, рекурсивный или biased).
Подробное описание с побитовыми схемами — в комментариях к markOop.hpp.
Второе слово — указатель на класс. Но не тот, который java.lang.Class, а klassOop — нативное описание типа объекта.
Что из себя представляет Klass, можно вычитать, опять же, в комментариях к klass.hpp. В частности, Klass содержит и java_mirror
@groth50
groth50 / ObjectHeader32.txt
Created July 12, 2018 14:40 — forked from arturmkrtchyan/ObjectHeader32.txt
Java Object Header
|----------------------------------------------------------------------------------------|--------------------|
| Object Header (64 bits) | State |
|-------------------------------------------------------|--------------------------------|--------------------|
| Mark Word (32 bits) | Klass Word (32 bits) | |
|-------------------------------------------------------|--------------------------------|--------------------|
| identity_hashcode:25 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Normal |
|-------------------------------------------------------|--------------------------------|--------------------|
| thread:23 | epoch:2 | age:4 | biased_lock:1 | lock:2 | OOP to metadata object | Biased |
|-------------------------------------------------------|--------------------------------|--------------------|
|