예제 #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();
 }
예제 #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();
 }
 /**
  * Retrives an object.
  *
  * @return The object retrieved.
  */
 @Inline
 public final ObjectReference pop() {
   return values.pop();
 }