public abstract class TraceLocal extends TransitiveClosure
Modifier and Type | Field and Description |
---|---|
protected AddressDeque |
rootLocations
delayed root slots
|
protected ObjectReferenceDeque |
values
gray objects
|
specializedScan
Constructor and Description |
---|
TraceLocal(int specializedScan,
Trace trace)
Constructor
|
TraceLocal(Trace trace)
Constructor
|
Modifier and Type | Method and Description |
---|---|
private void |
assertMutatorRemsetsFlushed()
Assert that the remsets have been flushed.
|
void |
completeTrace()
Finishing processing all GC work.
|
void |
flush()
Flush the local buffers of all deques.
|
ObjectReference |
getForwardedFinalizable(ObjectReference object)
If a Finalizable object has moved, return the new location.
|
ObjectReference |
getForwardedReference(ObjectReference object)
If the referenced object has moved, return the new location.
|
ObjectReference |
getForwardedReferenceType(ObjectReference object)
If the Reference Type object has moved, return the new location.
|
ObjectReference |
getForwardedReferent(ObjectReference object)
If the reference object (from a Reference Type) has object has moved,
return the new location.
|
boolean |
incrementalTrace(int workLimit)
Process GC work until either complete or workLimit
units of work are completed.
|
boolean |
isLive(ObjectReference object)
Is the specified object live?
|
boolean |
isReachable(ObjectReference object)
Is the specified object reachable?
|
boolean |
isReferentLive(ObjectReference object)
Is the specified referent of a reference type object live?
|
protected void |
logMessage(int minVerbose,
String message)
This method logs a message with prepended thread id, if the
verbosity level is greater or equal to the passed level.
|
protected boolean |
overwriteReferenceDuringTrace() |
void |
prepare()
TODO write JavaDoc comment
|
void |
processEdge(ObjectReference source,
Address slot)
Trace a reference during GC.
|
void |
processInteriorEdge(ObjectReference target,
Address slot,
boolean root)
Trace a reference during GC.
|
void |
processNode(ObjectReference object)
Add a gray object
|
protected void |
processRememberedSets()
Flush any remembered sets pertaining to the current collection.
|
void |
processRootEdge(Address slot,
boolean untraced)
Trace a reference during GC.
|
void |
processRoots()
Process any roots for which processing was delayed.
|
boolean |
readyToFinalize(ObjectReference object)
Return true if an object is ready to move to the finalizable
queue, i.e. it has no regular references to it.
|
void |
release() |
void |
reportDelayedRootEdge(Address slot)
Report a root edge to be processed during GC.
|
ObjectReference |
retainForFinalize(ObjectReference object)
An object is unreachable and is about to be added to the
finalizable queue.
|
ObjectReference |
retainReferent(ObjectReference object)
Make alive a referent object that is known not to be live
(isLive is false).
|
protected void |
scanObject(ObjectReference object)
Collectors that move objects must override this method.
|
ObjectReference |
traceObject(ObjectReference object)
This method is the core method during the trace of the object graph.
|
ObjectReference |
traceObject(ObjectReference object,
boolean root)
This method traces an object with knowledge of the fact that object
is a root or not.
|
boolean |
willNotMoveInCurrentCollection(ObjectReference object)
Ensure that the referenced object will not move from this point through
to the end of the collection.
|
getSpecializedScanClass, registerSpecializedScan
protected final ObjectReferenceDeque values
protected final AddressDeque rootLocations
public TraceLocal(Trace trace)
trace
- The global trace class to use.public TraceLocal(int specializedScan, Trace trace)
specializedScan
- The specialized scan id.trace
- The global trace class to use.protected boolean overwriteReferenceDuringTrace()
public final void processEdge(ObjectReference source, Address slot)
trace
method.processEdge
in class TransitiveClosure
source
- The source of the reference.slot
- The location containing the object reference to be
traced. The object reference is NOT an interior pointer.public final void reportDelayedRootEdge(Address slot)
slot
- The location containing the object reference to be
traced. The object reference is NOT an interior pointer.public final void processRootEdge(Address slot, boolean untraced)
trace
method.slot
- The location containing the object reference to be
traced. The object reference is NOT an interior pointer.untraced
- true
if objLoc
is an untraced root.public final void processInteriorEdge(ObjectReference target, Address slot, boolean root)
trace
method.target
- The object the interior edge points within.slot
- The location of the interior edge.root
- true
if this is a root edge.protected void scanObject(ObjectReference object)
object
- The forwarded object to be scannedpublic final void processNode(ObjectReference object)
processNode
in class TransitiveClosure
object
- The object to be enqueuedpublic final void flush()
public boolean isLive(ObjectReference object)
object
- The object.true
if the object is live.public boolean isReachable(ObjectReference object)
object
- The object.true
if the object is live.public boolean isReferentLive(ObjectReference object)
object
- The object.true
if the reference object is live.public ObjectReference traceObject(ObjectReference object)
object
- The object to be traced.public ObjectReference traceObject(ObjectReference object, boolean root)
object
- The object to be traced.root
- Is this object a root?public boolean willNotMoveInCurrentCollection(ObjectReference object)
object
- The object that must not move during the collection.true
If the object will not move during collectionpublic ObjectReference getForwardedFinalizable(ObjectReference object)
object
- The object which may have been forwarded.object
.public ObjectReference getForwardedReferent(ObjectReference object)
object
- The object which may have been forwarded.object
.public ObjectReference getForwardedReferenceType(ObjectReference object)
object
- The object which may have been forwarded.object
.public ObjectReference getForwardedReference(ObjectReference object)
object
- The object which may have been forwarded.object
.public ObjectReference retainReferent(ObjectReference object)
traceObject
, which is implemented here. Other
collectors must override this method.object
- The object which is to be made alive.public ObjectReference retainForFinalize(ObjectReference object)
For many collectors these semantics reflect those of
traceObject
, which is implemented here. Other
collectors must override this method.
TODO is the JavaDoc for this method still up to date?
object
- The object which may have been forwarded.object
. In this
case return object
, copying collectors must override
this method.public boolean readyToFinalize(ObjectReference object)
isLive
, which is implemented here. Other
collectors must override this method.object
- The object being queried.true
if the object has no regular references
to it.public void prepare()
public void release()
public void processRoots()
public void completeTrace()
public boolean incrementalTrace(int workLimit)
workLimit
- The maximum units of work to perform.true
if all work was completed within workLimit.protected void processRememberedSets()
private void assertMutatorRemsetsFlushed()
protected final void logMessage(int minVerbose, String message)
minVerbose
- The required verbosity levelmessage
- The message to display