code: public final <T> T shallowCopy(T obj) {
  		long size = shallowSizeOf(obj);
  		long address = THE_UNSAFE.allocateMemory(size);
  		long start = toAddress(obj);
  		THE_UNSAFE.copyMemory(start, address, size);
  
  		@SuppressWarnings("unchecked")
  		final T result = (T) fromAddress(address);
  		return result;
  	}
docs: Performs a shallow copy of the given object - a new instance is allocated with the same contents. Any object
  references inside the copy will be the same as the original object.
  @param obj Object to copy
  @param <T> The type being copied
  @return A new instance, identical to the original