public final ObjectReference traceObject(ObjectReference object, boolean root) { if (object.isNull()) return object; if (RefCountSpace.RC_SANITY_CHECK && root) local().rc.incSanityTraceRoot(object); if (Space.isInSpace(GenRC.NS, object)) { ObjectReference rtn = GenRC.nurserySpace.traceObject(this, object);   if (root) { if (RefCountSpace.INC_DEC_ROOT) { RefCountSpace.incRC(rtn); local().addToRootSet(rtn); } else if (RefCountSpace.setRoot(rtn)) { local().addToRootSet(rtn); } } else RefCountSpace.incRC(rtn); return rtn; } else if (GenRC.isRCObject(object)) { if (root) return GenRC.rcSpace.traceObject(this, object); else RefCountSpace.incRC(object); }  return object;
public final ObjectReference traceObject(ObjectReference object) { return traceObject(object,false);
  public final ObjectReference traceObject(ObjectReference object,                                                  boolean root) {    if (object.isNull()) return object;    if (RefCountSpace.RC_SANITY_CHECK && root)      local().rc.incSanityTraceRoot(object);    if (Space.isInSpace(GenRC.NS, object)) {      ObjectReference rtn = GenRC.nurserySpace.traceObject(this, object);      // every incoming reference to the from-space object must inc the      // ref count of forwarded (to-space) object...      if (root) {        if (RefCountSpace.INC_DEC_ROOT) {          RefCountSpace.incRC(rtn);          local().addToRootSet(rtn);        } else if (RefCountSpace.setRoot(rtn)) {          local().addToRootSet(rtn);        }      } else        RefCountSpace.incRC(rtn);      return rtn;    } else if (GenRC.isRCObject(object)) {      if (root)        return GenRC.rcSpace.traceObject(this, object);      else        RefCountSpace.incRC(object);    }    // else this is not a rc heap pointer    return object;  }