Exemplo n.º 1
0
 /**
  * Process GC work until either complete or workLimit units of work are completed.
  *
  * @param workLimit The maximum units of work to perform.
  * @return True if all work was completed within workLimit.
  */
 @Inline
 public boolean incrementalTrace(int workLimit) {
   logMessage(4, "Continuing GC in parallel (incremental)");
   logMessage(5, "processing gray objects");
   int units = 0;
   do {
     while (!values.isEmpty() && units < workLimit) {
       ObjectReference v = values.pop();
       scanObject(v);
       units++;
     }
   } while (!values.isEmpty() && units < workLimit);
   return values.isEmpty();
 }
Exemplo n.º 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();
 }
 /**
  * Pushes an object onto the queue, forcing an out of line sequence.
  *
  * @param object The object to push.
  */
 @Inline
 public final void pushOOL(ObjectReference object) {
   values.pushOOL(object);
 }
 /** Return true if this buffer is locally empty */
 public final boolean isFlushed() {
   return values.isFlushed();
 }
 /** Flushes all local state back to the shared queue. */
 public final void flushLocal() {
   values.flushLocal();
 }
 @Inline
 public final boolean isEmpty() {
   return values.isEmpty();
 }
 /**
  * Retrives an object.
  *
  * @return The object retrieved.
  */
 @Inline
 public final ObjectReference pop() {
   return values.pop();
 }
Exemplo n.º 8
0
 public void release() {
   values.reset();
   rootLocations.reset();
 }
Exemplo n.º 9
0
 /** Flush the local buffers of all deques. */
 public final void flush() {
   values.flushLocal();
   rootLocations.flushLocal();
 }
Exemplo n.º 10
0
 /**
  * Add a gray object
  *
  * @param object The object to be enqueued
  */
 @Inline
 public final void processNode(ObjectReference object) {
   values.push(object);
 }