Für HotSpot:
Der Objekt-Header besteht aus einem Zeichen Wort und einem klass Zeiger.
Die Zeichen Wort hat Wortgrße (4 byte
auf 32-Bit-Architekturen, 8 byte
auf 64-Bit-Architekturen) und
die Klass Zeiger Wortgröße auf 32 bit
Architekturen hat. Auf 64 bit
Architekturen der Klasse Zeiger hat entweder Wortgröße, kann aber auch 4 byte
haben, wenn die Heap-Adressen in diesen 4 bytes
codiert werden können.
Diese Optimierung heißt "komprimiert oops" und Sie können es auch mit der Option UseCompressedOops
steuern.
Sie können auch einen Wiki-Eintrag über diese 1 finden.
Das Markenwort wird tatsächlich für viele Dinge verwendet.
- Eine davon ist
Biased Locking
2, über die HotSpot effizientes Sperren implementieren kann.
- Es wird auch während
GC to set forward pointers
und to store the age of the objects
verwendet. Der Identitäts-Hash-Code eines Objekts kann innerhalb der Marke gespeichert werden (System.identityHashCode
/Object.hashCode
).
Es ist ein Kommentar im Quellcode von markOop.hpp, die das Layout von der Architektur abhängig beschreibt:
// 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)
Sie können auch die oop-Header-Datei here finden.
"oop" steht für * gewöhnlichen Objektzeiger * – user2418306