public abstract class ObjectHeader extends Object
An ObjectHeader is a reference-sized collection of bits in each Object instance. It holds meta-information about this instance. The ObjectHeader holds a DynamicHub, which identifies the Class of the instance, and flags used by the garbage collector. Alternatively, e.g., during garbage collection, the ObjectHeader may hold a forwarding reference to the new location of this instance if the Object has been moved by the collector.
I treat an ObjectHeader as an Unsigned, until careful examination allows me to cast it to a Pointer, or to an Object. Since an ObjectHeader is just a collection of bits, rather than an Object, the methods in this class are all static methods.
These methods operate on a bewildering mixture of Object *or* Pointer. Because a Pointer *is* an Object, the methods have different names, rather than just different signatures. Also a mixture of Object and Unsigned (and Unsigned) to distinguish methods that read from Objects, from methods that operate on a previously read ObjectHeader, or methods that operate on just the low-order bits of an ObjectHeader. The variants that take an Object as a parameter have the reasonable names because they are used from outside. The variants that take an Unsigned ObjectHeader have "Header" in their name or the name of the argument, and the variants that take an Unsigned with just the header bits in them have "HeaderBits" in their name or in the name of the argument. (I hope I did that consistently.)
| Modifier and Type | Field and Description |
|---|---|
static org.graalvm.word.UnsignedWord |
BITS_CLEAR |
protected static org.graalvm.word.UnsignedWord |
BITS_MASK |
| Modifier | Constructor and Description |
|---|---|
protected |
ObjectHeader()
Constructor for concrete subclasses.
|
| Modifier and Type | Method and Description |
|---|---|
static org.graalvm.word.UnsignedWord |
clearBits(org.graalvm.word.UnsignedWord header)
Clear the object header bits from a header.
|
static DynamicHub |
dynamicHubFromObjectHeader(org.graalvm.word.UnsignedWord header)
Decode a DynamicHub from an Object header.
|
abstract Object |
getForwardedObject(org.graalvm.word.Pointer objectPointer)
Extract a forwarded Object from a header.
|
abstract org.graalvm.word.Pointer |
getForwardingPointer(org.graalvm.word.Pointer objectPointer)
Extract a forwarding Pointer from a header.
|
protected static int |
getHubOffset() |
protected static int |
getReferenceSize() |
static void |
initializeHeaderOfNewObject(org.graalvm.word.Pointer objectPointer,
org.graalvm.word.WordBase header)
Write the header of a newly created object, using
LocationIdentity.init(). |
abstract boolean |
isAlignedObject(Object o) |
abstract boolean |
isForwardedHeader(org.graalvm.word.UnsignedWord header)
Is this header a forwarding pointer?
|
protected abstract boolean |
isHeapAllocated(Object o) |
protected abstract boolean |
isNonHeapAllocated(Object o) |
abstract boolean |
isNonHeapAllocatedHeader(org.graalvm.word.UnsignedWord header) |
abstract boolean |
isUnalignedObject(Object o) |
static DynamicHub |
readDynamicHubFromObject(Object o) |
static org.graalvm.word.UnsignedWord |
readHeaderFromObject(Object o)
Read the header of the specified object.
|
static org.graalvm.word.UnsignedWord |
readHeaderFromPointer(org.graalvm.word.Pointer objectPointer)
Read the header of the object at the specified address.
|
abstract long |
setBootImageOnLong(long l)
A special method for use during native image construction.
|
protected abstract void |
setUnaligned(Object o)
Objects are aligned by default.
|
abstract String |
toStringFromHeader(org.graalvm.word.UnsignedWord header) |
String |
toStringFromObject(Object o) |
static void |
writeHeaderToObject(Object o,
org.graalvm.word.WordBase header)
Write the header of the specified object.
|
protected static final org.graalvm.word.UnsignedWord BITS_MASK
public static final org.graalvm.word.UnsignedWord BITS_CLEAR
public static org.graalvm.word.UnsignedWord readHeaderFromPointer(org.graalvm.word.Pointer objectPointer)
public static void initializeHeaderOfNewObject(org.graalvm.word.Pointer objectPointer,
org.graalvm.word.WordBase header)
LocationIdentity.init().public static org.graalvm.word.UnsignedWord readHeaderFromObject(Object o)
public static void writeHeaderToObject(Object o, org.graalvm.word.WordBase header)
public static DynamicHub readDynamicHubFromObject(Object o)
public static DynamicHub dynamicHubFromObjectHeader(org.graalvm.word.UnsignedWord header)
public static org.graalvm.word.UnsignedWord clearBits(org.graalvm.word.UnsignedWord header)
public abstract boolean isForwardedHeader(org.graalvm.word.UnsignedWord header)
public abstract org.graalvm.word.Pointer getForwardingPointer(org.graalvm.word.Pointer objectPointer)
public abstract Object getForwardedObject(org.graalvm.word.Pointer objectPointer)
public abstract long setBootImageOnLong(long l)
protected abstract void setUnaligned(Object o)
protected abstract boolean isHeapAllocated(Object o)
public abstract boolean isNonHeapAllocatedHeader(org.graalvm.word.UnsignedWord header)
protected abstract boolean isNonHeapAllocated(Object o)
public abstract boolean isAlignedObject(Object o)
public abstract boolean isUnalignedObject(Object o)
protected static int getReferenceSize()
protected static int getHubOffset()
public abstract String toStringFromHeader(org.graalvm.word.UnsignedWord header)