Example #1
0
 /** Process any roots for which processing was delayed. */
 @Inline
 public void processRoots() {
   logMessage(5, "processing delayed root objects");
   while (!rootLocations.isEmpty()) {
     processRootEdge(rootLocations.pop());
   }
 }
Example #2
0
 /** Finishing processing all GC work. This method iterates until all work queues are empty. */
 @Inline
 public void completeTrace() {
   logMessage(4, "Processing GC in parallel");
   if (!rootLocations.isEmpty()) {
     processRoots();
   }
   logMessage(5, "processing gray objects");
   assertMutatorRemsetsFlushed();
   do {
     while (!values.isEmpty()) {
       ObjectReference v = values.pop();
       scanObject(v);
     }
     processRememberedSets();
   } while (!values.isEmpty());
   assertMutatorRemsetsFlushed();
 }
Example #3
0
 /** Flush the local buffers of all deques. */
 public final void flush() {
   values.flushLocal();
   rootLocations.flushLocal();
 }
Example #4
0
 public void release() {
   values.reset();
   rootLocations.reset();
 }
Example #5
0
 /**
  * Report a root edge to be processed during GC. As the given reference may theoretically point to
  * an object required during root scanning, the caller has requested processing be delayed.
  *
  * @param slot The location containing the object reference to be traced. The object reference is
  *     <i>NOT</i> an interior pointer.
  * @param root True if <code>objLoc</code> is within a root.
  */
 @Inline
 public final void reportDelayedRootEdge(Address slot) {
   rootLocations.push(slot);
 }