in datasketches-memory-java8/src/main/java/org/apache/datasketches/memory/internal/CompareAndCopy.java [163:177]
private static void copyMemoryOverlapAddressCheck(final Object srcUnsafeObj, final long srcAdd,
final Object dstUnsafeObj, final long dstAdd, final long lengthBytes) {
if (((srcAdd + lengthBytes) <= dstAdd) || ((dstAdd + lengthBytes) <= srcAdd)) {
copyNonOverlappingMemoryWithChunking(srcUnsafeObj, srcAdd, dstUnsafeObj, dstAdd,
lengthBytes);
return;
}
if (srcAdd == dstAdd) {
throw new IllegalArgumentException(
"Attempt to copy a block of memory exactly in-place, should be a bug");
}
// If regions do overlap, fall back to unsafe.copyMemory, tolerating potentially long
// Time to Safe Point pauses.
unsafe.copyMemory(srcUnsafeObj, srcAdd, dstUnsafeObj, dstAdd, lengthBytes);
}