Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Each distinct transitive closure operation is defined as a subclass of TraceLocal.  The closure is performed in the collectionPhase method of the plan-specific CollectorContext class

Code Block
titleMSCollector.java
languagejava
  public void collectionPhase(short phaseId, boolean primary) {
    ...
    if (phaseId == MS.CLOSURE) {
      fullTrace.completeTrace();
      return;
    }
    ...
  }

The initial starting point for the closure is computed by the STACK_ROOTS and ROOTS phases, which add root locations to a buffer by calling TraceLocal.reportDelayedRootEdge.  The closure operation proceeds by invoking traceObiect on each root location (in method processRootEdge), and then invoking scanObject on each heap object encountered.  Note that the CLOSURE operation is performed multiple times in each GC, due to