public final class HeapChunk extends Object
AlignedHeapChunk, which provides methods that are specific to the
type of chunk and its layout. (Such classes intentionally do not subclass HeapChunk so to
not directly expose its methods.)
A HeapChunk is raw memory with a HeapChunk.Header on the beginning that stores bookkeeping information about the HeapChunk. HeapChunks do not have any instance methods: instead they have static methods that take the HeapChunk.Header as a parameter.
HeapChunks maintain offsets of the current allocation point (top) with them, and the limit (end) where Objects can be allocated. Subclasses of HeapChunks can add additional fields as needed.
HeapChunks maintain some fields that would otherwise have to be maintained in per-HeapChunk memory by the Space that contains them. For example, the fields for linking lists of HeapChunks in a Space is kept in each HeapChunk rather than in some storage outside the HeapChunk.
For fields that are maintained as more-specifically-typed offsets by leaf "sub-classes", HeapChunk defines the generic (Pointer) "get" methods, and only the "sub-classes" define "set" methods that store more-specifically-typed Pointers, for type safety.
In addition to the declared fields of a HeapChunk.Header, for example, a subtype keeps a card table for the write barrier, but because they are variable-sized, rather than declaring field in the Header, static methods are used to compute Pointers to those "fields".
HeapChunks are *not* examined for interior Object references by the collector, though the Objects allocated within the HeapChunk are examined by the collector.
| Modifier and Type | Class and Description |
|---|---|
static interface |
HeapChunk.Header<T extends HeapChunk.Header<T>>
The header of a chunk.
|
| Modifier and Type | Method and Description |
|---|---|
static org.graalvm.word.Pointer |
asPointer(HeapChunk.Header<?> that) |
static org.graalvm.word.UnsignedWord |
availableObjectMemory(HeapChunk.Header<?> that) |
static HeapChunk.Header<?> |
getEnclosingHeapChunk(Object obj) |
static HeapChunk.Header<?> |
getEnclosingHeapChunk(org.graalvm.word.Pointer ptrToObj,
org.graalvm.word.UnsignedWord header) |
static org.graalvm.word.UnsignedWord |
getEndOffset(HeapChunk.Header<?> that) |
static org.graalvm.word.Pointer |
getEndPointer(HeapChunk.Header<?> that) |
static <T extends HeapChunk.Header<T>> |
getNext(HeapChunk.Header<T> that) |
static <T extends HeapChunk.Header<T>> |
getPrevious(HeapChunk.Header<T> that) |
static Space |
getSpace(HeapChunk.Header<?> that) |
static org.graalvm.word.UnsignedWord |
getTopOffset(HeapChunk.Header<?> that) |
static org.graalvm.word.Pointer |
getTopPointer(HeapChunk.Header<?> that) |
static void |
initialize(HeapChunk.Header<?> chunk,
org.graalvm.word.Pointer objectsStart,
org.graalvm.word.UnsignedWord chunkSize) |
static void |
setEndOffset(HeapChunk.Header<?> that,
org.graalvm.word.UnsignedWord newEnd) |
static <T extends HeapChunk.Header<T>> |
setNext(HeapChunk.Header<T> that,
T newNext) |
static <T extends HeapChunk.Header<T>> |
setPrevious(HeapChunk.Header<T> that,
T newPrevious) |
static void |
setSpace(HeapChunk.Header<?> that,
Space newSpace) |
static void |
setTopPointer(HeapChunk.Header<?> that,
org.graalvm.word.Pointer newTop) |
static boolean |
walkObjectsFrom(HeapChunk.Header<?> that,
org.graalvm.word.Pointer offset,
ObjectVisitor visitor) |
static boolean |
walkObjectsFromInline(HeapChunk.Header<?> that,
org.graalvm.word.Pointer startOffset,
ObjectVisitor visitor) |
public static void initialize(HeapChunk.Header<?> chunk, org.graalvm.word.Pointer objectsStart, org.graalvm.word.UnsignedWord chunkSize)
public static org.graalvm.word.UnsignedWord getTopOffset(HeapChunk.Header<?> that)
public static org.graalvm.word.Pointer getTopPointer(HeapChunk.Header<?> that)
public static void setTopPointer(HeapChunk.Header<?> that, org.graalvm.word.Pointer newTop)
public static org.graalvm.word.UnsignedWord getEndOffset(HeapChunk.Header<?> that)
public static org.graalvm.word.Pointer getEndPointer(HeapChunk.Header<?> that)
public static void setEndOffset(HeapChunk.Header<?> that, org.graalvm.word.UnsignedWord newEnd)
public static Space getSpace(HeapChunk.Header<?> that)
public static void setSpace(HeapChunk.Header<?> that, Space newSpace)
public static <T extends HeapChunk.Header<T>> T getPrevious(HeapChunk.Header<T> that)
public static <T extends HeapChunk.Header<T>> void setPrevious(HeapChunk.Header<T> that, T newPrevious)
public static <T extends HeapChunk.Header<T>> T getNext(HeapChunk.Header<T> that)
public static <T extends HeapChunk.Header<T>> void setNext(HeapChunk.Header<T> that, T newNext)
public static boolean walkObjectsFrom(HeapChunk.Header<?> that, org.graalvm.word.Pointer offset, ObjectVisitor visitor)
public static boolean walkObjectsFromInline(HeapChunk.Header<?> that, org.graalvm.word.Pointer startOffset, ObjectVisitor visitor)
public static org.graalvm.word.UnsignedWord availableObjectMemory(HeapChunk.Header<?> that)
public static org.graalvm.word.Pointer asPointer(HeapChunk.Header<?> that)
public static HeapChunk.Header<?> getEnclosingHeapChunk(Object obj)
public static HeapChunk.Header<?> getEnclosingHeapChunk(org.graalvm.word.Pointer ptrToObj, org.graalvm.word.UnsignedWord header)