code: JSMessageData getCopy() {
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) JmfTr.entry(this, tc, "getCopy");
      JSMessageImpl copy;
  
      synchronized (getMessageLockArtefact()) {
        // Create a new instance of ourselves
        copy = new JSMessageImpl(this);
  
        // Allow the message data to be lazy-copied
        copy.lazyCopy(this);
  
        // The copy is a new top-level message
        copy.setMaster();
  
        // We must clear our boxed cache at this stage, since items in the
        // boxed cache may refer to entries in our now potentially shared cache
        // and this could result in  consistency problems. By clearing the
        // cache here it will get recreated with new copies when required.
        if (boxManager != null) {
          boxManager.reset();
        }
  
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) JmfTr.exit(this, tc, "getCopy", copy);
      return copy;
    }
docs: message needs to span the construction of the new one & the call to lazyCopy().