public Value getValue(Env env) { SoftReference <CopyRoot> copyRef = null; if (_freeList != null) { copyRef = _freeList.allocate(); } if (copyRef != null) { CopyRoot copy = copyRef.get(); if (copy != null) { copy.allocate(env); return(copy.getRoot()); } } Value value = null; if (_valueRef != null) { value = _valueRef.get(); } if (value != null) { CopyRoot root = new CopyRoot(this); root.allocate(env); Value copy = value.copyTree(env, root); root.setRoot(copy); return(copy); } else { return(null); } }