You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2022/06/12 21:50:19 UTC

[datasketches-java] branch checkMemoryWith17 created (now 5b39cbe7)

This is an automated email from the ASF dual-hosted git repository.

leerho pushed a change to branch checkMemoryWith17
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git


      at 5b39cbe7 changed pom - then changed it back.

This branch includes the following new commits:

     new 23aff8d9 Interim 1
     new 9a2f0197 Merge branch 'master' into checkMemoryWith17
     new 2a772d92 Merge branch 'master' into checkMemoryWith17
     new 3eff4f29 Java17 pases all tests with no errors!
     new 5b39cbe7 changed pom - then changed it back.

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-java] 02/05: Merge branch 'master' into checkMemoryWith17

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch checkMemoryWith17
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git

commit 9a2f0197826226c6caa93962bb55c2cba57aaa81
Merge: 23aff8d9 f68aa7dd
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Thu Jun 9 12:06:12 2022 -0700

    Merge branch 'master' into checkMemoryWith17

 .github/workflows/codeql-analysis.yml              |  69 ---
 .../org/apache/datasketches/HashOperations.java    |   4 +-
 src/main/java/org/apache/datasketches/Util.java    | 480 ++++++++++++---------
 .../cpc/CompressionCharacterization.java           |   8 +-
 .../apache/datasketches/cpc/MergingValidation.java |   6 +-
 .../datasketches/cpc/StreamingValidation.java      |   4 +-
 .../org/apache/datasketches/fdt/PostProcessor.java |   4 +-
 .../datasketches/frequencies/ItemsSketch.java      |   8 +-
 .../datasketches/frequencies/LongsSketch.java      |   8 +-
 .../frequencies/ReversePurgeItemHashMap.java       |   4 +-
 .../frequencies/ReversePurgeLongHashMap.java       |   4 +-
 .../datasketches/hash/MurmurHash3Adaptor.java      |   4 +-
 .../apache/datasketches/hll/DirectCouponList.java  |   6 -
 .../org/apache/datasketches/hll/PreambleUtil.java  |  10 +-
 .../apache/datasketches/hllmap/CouponHashMap.java  |   4 +-
 .../datasketches/quantiles/DoublesMergeImpl.java   |   4 +-
 .../datasketches/quantiles/DoublesSketch.java      |   4 +-
 .../datasketches/quantiles/ItemsMergeImpl.java     |   4 +-
 .../org/apache/datasketches/quantiles/Util.java    |   8 +-
 .../sampling/ReservoirItemsSketch.java             |   8 +-
 .../sampling/ReservoirLongsSketch.java             |   8 +-
 .../datasketches/sampling/ReservoirSize.java       |   4 +-
 .../datasketches/sampling/VarOptItemsSketch.java   |   8 +-
 .../org/apache/datasketches/theta/AnotBimpl.java   |   4 +-
 .../datasketches/theta/JaccardSimilarity.java      |   6 +-
 .../apache/datasketches/theta/SetOperation.java    |   8 +-
 .../datasketches/theta/SetOperationBuilder.java    |   4 +-
 .../java/org/apache/datasketches/theta/Sketch.java |   4 +-
 .../datasketches/theta/UpdateSketchBuilder.java    |   4 +-
 .../java/org/apache/datasketches/tuple/AnotB.java  |   6 +-
 .../org/apache/datasketches/tuple/HashTables.java  |   4 +-
 .../apache/datasketches/tuple/Intersection.java    |   4 +-
 .../datasketches/tuple/JaccardSimilarity.java      |  10 +-
 .../datasketches/tuple/QuickSelectSketch.java      |   8 +-
 .../java/org/apache/datasketches/tuple/Util.java   |   4 +-
 .../arrayofdoubles/ArrayOfDoublesAnotBImpl.java    |   4 +-
 .../ArrayOfDoublesQuickSelectSketch.java           |   4 +-
 .../tuple/arrayofdoubles/HashTables.java           |   4 +-
 .../HeapArrayOfDoublesQuickSelectSketch.java       |   6 +-
 .../java/org/apache/datasketches/UtilTest.java     | 262 +++++++----
 .../datasketches/frequencies/LongsSketchTest.java  |   4 +-
 .../quantiles/DirectUpdateDoublesSketchTest.java   |   4 +-
 42 files changed, 557 insertions(+), 468 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-java] 01/05: Interim 1

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch checkMemoryWith17
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git

commit 23aff8d9cccd86311eb8074d9596ccb83f217625
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Thu Jun 9 09:48:05 2022 -0700

    Interim 1
---
 pom.xml                                                     | 2 +-
 src/main/java/org/apache/datasketches/cpc/CpcSketch.java    | 7 ++++---
 src/main/java/org/apache/datasketches/hash/MurmurHash3.java | 2 +-
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/pom.xml b/pom.xml
index 607475ef..b8657b40 100644
--- a/pom.xml
+++ b/pom.xml
@@ -92,7 +92,7 @@ under the License.
 
     <!-- System-wide properties -->
     <maven.version>3.5.0</maven.version>
-    <java.version>1.8</java.version>
+    <java.version>17</java.version>
     <maven.compiler.source>${java.version}</maven.compiler.source>
     <maven.compiler.target>${java.version}</maven.compiler.target>
     <argLine>-Xmx4g -Duser.language=en -Duser.country=US -Dfile.encoding=UTF-8</argLine>
diff --git a/src/main/java/org/apache/datasketches/cpc/CpcSketch.java b/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
index 162a9c45..585d2b91 100644
--- a/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
+++ b/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
@@ -298,10 +298,11 @@ public final class CpcSketch {
    */
   public byte[] toByteArray() {
     final CompressedState state = CompressedState.compress(this);
-    final long cap = state.getRequiredSerializedBytes();
-    final WritableMemory wmem = WritableMemory.allocate((int) cap);
+    final int cap = (int) state.getRequiredSerializedBytes();
+    final byte[] byteArr = new byte[cap];
+    final WritableMemory wmem = WritableMemory.writableWrap(byteArr);
     state.exportToMemory(wmem);
-    return (byte[]) wmem.getArray();
+    return byteArr;
   }
 
   /**
diff --git a/src/main/java/org/apache/datasketches/hash/MurmurHash3.java b/src/main/java/org/apache/datasketches/hash/MurmurHash3.java
index eb9756e5..dff4d515 100644
--- a/src/main/java/org/apache/datasketches/hash/MurmurHash3.java
+++ b/src/main/java/org/apache/datasketches/hash/MurmurHash3.java
@@ -341,7 +341,7 @@ public final class MurmurHash3 implements Serializable {
     final long lengthBytes = mem.getCapacity();
     checkPositive(lengthBytes);
 
-    final Memory memLE = mem.getTypeByteOrder() == ByteOrder.LITTLE_ENDIAN
+    final Memory memLE = mem.getByteOrder() == ByteOrder.LITTLE_ENDIAN
         ? mem : mem.region(0, lengthBytes, ByteOrder.LITTLE_ENDIAN);
 
     final HashState hashState = new HashState(seed, seed);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-java] 05/05: changed pom - then changed it back.

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch checkMemoryWith17
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git

commit 5b39cbe794d203d67c9426316e5650d34ab11289
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Sun Jun 12 14:50:12 2022 -0700

    changed pom - then changed it back.
---
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pom.xml b/pom.xml
index 0f5c139c..fe7bdfea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -131,12 +131,12 @@ under the License.
   </properties>
 
   <dependencies>
-    <!-- UNIQUE FOR THIS JAVA COMPONENT 
+    <!-- UNIQUE FOR THIS JAVA COMPONENT -->
     <dependency>
       <groupId>org.apache.datasketches</groupId>
       <artifactId>datasketches-memory</artifactId>
       <version>${datasketches-memory.version}</version>
-    </dependency> -->
+    </dependency>
     <!-- END: UNIQUE FOR THIS JAVA COMPONENT -->
     <!-- Test Scope -->
     <dependency>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-java] 04/05: Java17 pases all tests with no errors!

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch checkMemoryWith17
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git

commit 3eff4f29c3fbd543618dd72b73df9a904202747b
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Sat Jun 11 22:04:54 2022 -0700

    Java17 pases all tests with no errors!
---
 pom.xml                                            |   4 +-
 .../org/apache/datasketches/hll/BaseHllSketch.java |  27 ++--
 .../org/apache/datasketches/hll/CouponList.java    |   5 -
 .../apache/datasketches/hll/DirectCouponList.java  |   5 -
 .../apache/datasketches/hll/DirectHllArray.java    |  21 +--
 .../java/org/apache/datasketches/hll/HllArray.java |   5 -
 .../org/apache/datasketches/hll/HllSketch.java     |   5 +-
 .../org/apache/datasketches/hll/HllSketchImpl.java |   5 +-
 .../java/org/apache/datasketches/hll/Union.java    |   5 +-
 .../org/apache/datasketches/kll/KllSketch.java     |  19 +--
 .../quantiles/DirectCompactDoublesSketch.java      |   4 +-
 .../quantiles/DirectUpdateDoublesSketchR.java      |   4 +-
 .../datasketches/quantiles/DoublesSketch.java      |  19 +--
 .../datasketches/quantiles/DoublesUnion.java       |  17 +-
 .../datasketches/quantiles/DoublesUnionImplR.java  |   4 +-
 .../org/apache/datasketches/theta/AnotBimpl.java   |   4 +-
 .../datasketches/theta/DirectCompactSketch.java    |   4 +-
 .../theta/DirectQuickSelectSketchR.java            |   4 +-
 .../datasketches/theta/IntersectionImpl.java       |   4 +-
 .../apache/datasketches/theta/SetOperation.java    |  19 +--
 .../java/org/apache/datasketches/theta/Sketch.java |  19 +--
 .../org/apache/datasketches/theta/UnionImpl.java   |   4 +-
 .../apache/datasketches/cpc/CpcCBinariesTest.java  |  48 +++---
 .../apache/datasketches/cpc/PreambleUtilTest.java  |   5 +-
 .../datasketches/hash/MurmurHash3v2Test.java       |  68 ++++----
 .../datasketches/hll/DirectAuxHashMapTest.java     |  13 +-
 .../datasketches/hll/DirectCouponListTest.java     |  11 +-
 .../org/apache/datasketches/hll/HllArrayTest.java  |   4 +-
 .../apache/datasketches/hll/PreambleUtilTest.java  |   5 -
 .../org/apache/datasketches/hll/UnionTest.java     |   2 +-
 .../org/apache/datasketches/kll/KllSketchTest.java |   8 +-
 .../datasketches/quantiles/DebugUnionTest.java     |  10 +-
 .../DirectQuantilesMemoryRequestTest.java          |  36 ++---
 .../datasketches/quantiles/DoublesSketchTest.java  |  33 ++--
 .../quantiles/DoublesUnionImplTest.java            |  10 +-
 .../datasketches/quantiles/PreambleUtilTest.java   |  10 +-
 .../datasketches/theta/CompactSketchTest.java      |  10 +-
 .../theta/DirectQuickSelectSketchTest.java         | 114 +++++++-------
 .../datasketches/theta/HeapIntersectionTest.java   |   2 +-
 .../theta/HeapifyWrapSerVer1and2Test.java          | 175 +++++++++++----------
 .../datasketches/theta/SetOperationTest.java       |  10 +-
 .../org/apache/datasketches/theta/SketchTest.java  |   8 +-
 .../apache/datasketches/theta/UnionImplTest.java   |  27 ++--
 .../datasketches/theta/UpdateSketchTest.java       |  14 +-
 44 files changed, 414 insertions(+), 416 deletions(-)

diff --git a/pom.xml b/pom.xml
index fe7bdfea..0f5c139c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -131,12 +131,12 @@ under the License.
   </properties>
 
   <dependencies>
-    <!-- UNIQUE FOR THIS JAVA COMPONENT -->
+    <!-- UNIQUE FOR THIS JAVA COMPONENT 
     <dependency>
       <groupId>org.apache.datasketches</groupId>
       <artifactId>datasketches-memory</artifactId>
       <version>${datasketches-memory.version}</version>
-    </dependency>
+    </dependency> -->
     <!-- END: UNIQUE FOR THIS JAVA COMPONENT -->
     <!-- Test Scope -->
     <dependency>
diff --git a/src/main/java/org/apache/datasketches/hll/BaseHllSketch.java b/src/main/java/org/apache/datasketches/hll/BaseHllSketch.java
index c53a8701..30513c9f 100644
--- a/src/main/java/org/apache/datasketches/hll/BaseHllSketch.java
+++ b/src/main/java/org/apache/datasketches/hll/BaseHllSketch.java
@@ -180,24 +180,15 @@ abstract class BaseHllSketch {
   abstract boolean isOutOfOrder();
 
   /**
-   * Returns true if the given Memory refers to the same underlying resource as this sketch.
-   * The capacities must be the same.  If <i>this</i> is a region,
-   * the region offset must also be the same.
-   *
-   * <p>This is only relevant for HLL_4 sketches that have been configured for off-heap
-   * using WritableMemory or Memory.  For on-heap sketches or unions this will return false.
-   *
-   * <p>It is rare, but possible, the the off-heap memory that has been allocated to an HLL_4
-   * sketch may not be large enough. If this should happen, the sketch makes a request for more
-   * memory from the owner of the resource and then moves itself to this new location. This all
-   * happens transparently to the user. This method provides a means for the user to
-   * inquire of the sketch if it has, in fact, moved itself.
-   *
-   * @param mem the given Memory
-   * @return true if the given Memory refers to the same underlying resource as this sketch or
-   * union.
-   */
-  public abstract boolean isSameResource(Memory mem);
+   * Returns a positive number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &le; <i>that</i>
+   * base address.
+   * Returns a negative number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &gt; <i>that</i>
+   * base address.
+   * Returns a zero if there is no overlap or if one or both objects are null, not active or on heap.
+   * @param that the other BaseState object
+   * @return a long value representing the ordering and size of overlap between <i>this</i> and <i>that</i>.
+   */
+  public abstract long nativeOverlap(final Memory that);
 
   /**
    * Resets to empty, but does not change the configured values of lgConfigK and tgtHllType.
diff --git a/src/main/java/org/apache/datasketches/hll/CouponList.java b/src/main/java/org/apache/datasketches/hll/CouponList.java
index ee3eeb9b..d7fbb76f 100644
--- a/src/main/java/org/apache/datasketches/hll/CouponList.java
+++ b/src/main/java/org/apache/datasketches/hll/CouponList.java
@@ -183,11 +183,6 @@ class CouponList extends AbstractCoupons {
     return false;
   }
 
-  @Override
-  boolean isSameResource(final Memory mem) {
-    return false;
-  }
-
   @Override
   PairIterator iterator() {
     return new IntArrayPairIterator(couponIntArr, lgConfigK);
diff --git a/src/main/java/org/apache/datasketches/hll/DirectCouponList.java b/src/main/java/org/apache/datasketches/hll/DirectCouponList.java
index 3be65455..3d5224e9 100644
--- a/src/main/java/org/apache/datasketches/hll/DirectCouponList.java
+++ b/src/main/java/org/apache/datasketches/hll/DirectCouponList.java
@@ -197,11 +197,6 @@ class DirectCouponList extends AbstractCoupons {
     return mem.isDirect();
   }
 
-  @Override
-  boolean isSameResource(final Memory mem) {
-    return this.mem.isSameResource(mem);
-  }
-
   @Override
   PairIterator iterator() {
     final long dataStart = getMemDataStart();
diff --git a/src/main/java/org/apache/datasketches/hll/DirectHllArray.java b/src/main/java/org/apache/datasketches/hll/DirectHllArray.java
index d623b8c0..1527b91a 100644
--- a/src/main/java/org/apache/datasketches/hll/DirectHllArray.java
+++ b/src/main/java/org/apache/datasketches/hll/DirectHllArray.java
@@ -55,8 +55,8 @@ import org.apache.datasketches.memory.WritableMemory;
 abstract class DirectHllArray extends AbstractHllArray {
   WritableMemory wmem;
   Memory mem;
-  Object memObj;
-  long memAdd;
+  //Object memObj;
+  //long memAdd;
   final boolean compact;
 
   //Memory must be already initialized and may have data
@@ -64,8 +64,8 @@ abstract class DirectHllArray extends AbstractHllArray {
     super(lgConfigK, tgtHllType, CurMode.HLL);
     this.wmem = wmem;
     mem = wmem;
-    memObj = wmem.getArray();
-    memAdd = wmem.getCumulativeOffset(0L);
+    //memObj = wmem.getArray();
+    //memAdd = wmem.getCumulativeOffset(0L);
     compact = extractCompactFlag(mem);
     assert !compact;
     insertEmptyFlag(wmem, false);
@@ -76,8 +76,8 @@ abstract class DirectHllArray extends AbstractHllArray {
     super(lgConfigK, tgtHllType, CurMode.HLL);
     wmem = null;
     this.mem = mem;
-    memObj = ((WritableMemory) mem).getArray();
-    memAdd = mem.getCumulativeOffset(0L);
+    //memObj = ((WritableMemory) mem).getArray();
+    //memAdd = mem.getCumulativeOffset(0L);
     compact = extractCompactFlag(mem);
   }
 
@@ -85,8 +85,8 @@ abstract class DirectHllArray extends AbstractHllArray {
   final void updateMemory(final WritableMemory newWmem) {
     wmem = newWmem;
     mem = newWmem;
-    memObj = wmem.getArray();
-    memAdd = wmem.getCumulativeOffset(0L);
+    //memObj = wmem.getArray();
+    //memAdd = wmem.getCumulativeOffset(0L);
   }
 
   @Override
@@ -183,11 +183,6 @@ abstract class DirectHllArray extends AbstractHllArray {
     return extractOooFlag(mem);
   }
 
-  @Override
-  boolean isSameResource(final Memory mem) {
-    return this.mem.isSameResource(mem);
-  }
-
   @Override
   boolean isRebuildCurMinNumKxQFlag() {
     return extractRebuildCurMinNumKxQFlag(mem);
diff --git a/src/main/java/org/apache/datasketches/hll/HllArray.java b/src/main/java/org/apache/datasketches/hll/HllArray.java
index 63ab6b1f..f60025e1 100644
--- a/src/main/java/org/apache/datasketches/hll/HllArray.java
+++ b/src/main/java/org/apache/datasketches/hll/HllArray.java
@@ -184,11 +184,6 @@ abstract class HllArray extends AbstractHllArray {
     return oooFlag;
   }
 
-  @Override
-  boolean isSameResource(final Memory mem) {
-    return false;
-  }
-
   @Override
   boolean isRebuildCurMinNumKxQFlag() {
     return rebuildCurMinNumKxQ;
diff --git a/src/main/java/org/apache/datasketches/hll/HllSketch.java b/src/main/java/org/apache/datasketches/hll/HllSketch.java
index e401c1e2..7c1bc4e6 100644
--- a/src/main/java/org/apache/datasketches/hll/HllSketch.java
+++ b/src/main/java/org/apache/datasketches/hll/HllSketch.java
@@ -390,8 +390,9 @@ public class HllSketch extends BaseHllSketch {
   }
 
   @Override
-  public boolean isSameResource(final Memory mem) {
-    return hllSketchImpl.isSameResource(mem);
+  public long nativeOverlap(final Memory that) {
+    WritableMemory wmem = getWritableMemory();
+    return (wmem != null) ? wmem.nativeOverlap(that) : 0;
   }
 
   void mergeTo(final HllSketch that) {
diff --git a/src/main/java/org/apache/datasketches/hll/HllSketchImpl.java b/src/main/java/org/apache/datasketches/hll/HllSketchImpl.java
index 63b78c6e..df9e5f2d 100644
--- a/src/main/java/org/apache/datasketches/hll/HllSketchImpl.java
+++ b/src/main/java/org/apache/datasketches/hll/HllSketchImpl.java
@@ -100,7 +100,10 @@ abstract class HllSketchImpl {
 
   abstract boolean isRebuildCurMinNumKxQFlag();
 
-  abstract boolean isSameResource(Memory mem);
+  long nativeOverlap(final Memory that) {
+    WritableMemory wmem = getWritableMemory();
+    return (wmem != null) ? wmem.nativeOverlap(that) : 0;
+  }
 
   abstract PairIterator iterator();
 
diff --git a/src/main/java/org/apache/datasketches/hll/Union.java b/src/main/java/org/apache/datasketches/hll/Union.java
index 3693e894..3174ce74 100644
--- a/src/main/java/org/apache/datasketches/hll/Union.java
+++ b/src/main/java/org/apache/datasketches/hll/Union.java
@@ -248,8 +248,9 @@ public class Union extends BaseHllSketch {
   }
 
   @Override
-  public boolean isSameResource(final Memory mem) {
-    return gadget.isSameResource(mem);
+  public long nativeOverlap(final Memory that) {
+    WritableMemory wmem = gadget.hllSketchImpl.getWritableMemory();
+    return (wmem != null) ? wmem.nativeOverlap(that) : 0;
   }
 
   boolean isRebuildCurMinNumKxQFlag() {
diff --git a/src/main/java/org/apache/datasketches/kll/KllSketch.java b/src/main/java/org/apache/datasketches/kll/KllSketch.java
index 896cb1b9..437d6464 100644
--- a/src/main/java/org/apache/datasketches/kll/KllSketch.java
+++ b/src/main/java/org/apache/datasketches/kll/KllSketch.java
@@ -357,15 +357,16 @@ public abstract class KllSketch {
   }
 
   /**
-   * Returns true if the backing resource of <i>this</i> is identical with the backing resource
-   * of <i>that</i>. The capacities must be the same.  If <i>this</i> is a region,
-   * the region offset must also be the same.
-   * @param that A different non-null object
-   * @return true if the backing resource of <i>this</i> is the same as the backing resource
-   * of <i>that</i>.
-   */
-  public final boolean isSameResource(final Memory that) {
-    return (wmem != null) && wmem.isSameResource(that);
+   * Returns a positive number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &le; <i>that</i>
+   * base address.
+   * Returns a negative number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &gt; <i>that</i>
+   * base address.
+   * Returns a zero if there is no overlap or if one or both objects are null, not active or on heap.
+   * @param that the other BaseState object
+   * @return a long value representing the ordering and size of overlap between <i>this</i> and <i>that</i>.
+   */
+  public final long nativeOverlap(final Memory that) {
+    return (wmem != null) ? wmem.nativeOverlap(that) : 0;
   }
 
   /**
diff --git a/src/main/java/org/apache/datasketches/quantiles/DirectCompactDoublesSketch.java b/src/main/java/org/apache/datasketches/quantiles/DirectCompactDoublesSketch.java
index 3cba8ad0..6896711c 100644
--- a/src/main/java/org/apache/datasketches/quantiles/DirectCompactDoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/quantiles/DirectCompactDoublesSketch.java
@@ -181,8 +181,8 @@ final class DirectCompactDoublesSketch extends CompactDoublesSketch {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
-    return mem_.isSameResource(that);
+  public long nativeOverlap(final Memory that) {
+    return mem_.nativeOverlap(that);
   }
 
   //Restricted overrides
diff --git a/src/main/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchR.java b/src/main/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchR.java
index 161b0e7b..34aacf00 100644
--- a/src/main/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchR.java
+++ b/src/main/java/org/apache/datasketches/quantiles/DirectUpdateDoublesSketchR.java
@@ -109,8 +109,8 @@ class DirectUpdateDoublesSketchR extends UpdateDoublesSketch {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
-    return mem_.isSameResource(that);
+  public long nativeOverlap(final Memory that) {
+    return mem_.nativeOverlap(that);
   }
 
   @Override
diff --git a/src/main/java/org/apache/datasketches/quantiles/DoublesSketch.java b/src/main/java/org/apache/datasketches/quantiles/DoublesSketch.java
index 23f5bca0..313bd16e 100644
--- a/src/main/java/org/apache/datasketches/quantiles/DoublesSketch.java
+++ b/src/main/java/org/apache/datasketches/quantiles/DoublesSketch.java
@@ -483,15 +483,16 @@ public abstract class DoublesSketch {
   }
 
   /**
-   * Returns true if the backing resource of <i>this</i> is identical with the backing resource
-   * of <i>that</i>. The capacities must be the same.  If <i>this</i> is a region,
-   * the region offset must also be the same.
-   * @param that A different non-null object
-   * @return true if the backing resource of <i>this</i> is the same as the backing resource
-   * of <i>that</i>.
-   */
-  public boolean isSameResource(final Memory that) { //Overridden by direct sketches
-    return false;
+   * Returns a positive number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &le; <i>that</i>
+   * base address.
+   * Returns a negative number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &gt; <i>that</i>
+   * base address.
+   * Returns a zero if there is no overlap or if one or both objects are null, not active or on heap.
+   * @param that the other BaseState object
+   * @return a long value representing the ordering and size of overlap between <i>this</i> and <i>that</i>.
+   */
+  public long nativeOverlap(final Memory that) { //Overridden by direct sketches
+    return 0;
   }
 
   /**
diff --git a/src/main/java/org/apache/datasketches/quantiles/DoublesUnion.java b/src/main/java/org/apache/datasketches/quantiles/DoublesUnion.java
index 117e30e6..3b9d67d1 100644
--- a/src/main/java/org/apache/datasketches/quantiles/DoublesUnion.java
+++ b/src/main/java/org/apache/datasketches/quantiles/DoublesUnion.java
@@ -199,13 +199,14 @@ public abstract class DoublesUnion {
   public abstract String toString(boolean sketchSummary, boolean dataDetail);
 
   /**
-   * Returns true if the backing resource of <i>this</i> is identical with the backing resource
-   * of <i>that</i>. The capacities must be the same.  If <i>this</i> is a region,
-   * the region offset must also be the same.
-   * @param that A different non-null object
-   * @return true if the backing resource of <i>this</i> is the same as the backing resource
-   * of <i>that</i>.
-   */
-  public abstract boolean isSameResource(final Memory that);
+   * Returns a positive number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &le; <i>that</i>
+   * base address.
+   * Returns a negative number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &gt; <i>that</i>
+   * base address.
+   * Returns a zero if there is no overlap or if one or both objects are null, not active or on heap.
+   * @param that the other BaseState object
+   * @return a long value representing the ordering and size of overlap between <i>this</i> and <i>that</i>.
+   */
+  public abstract long nativeOverlap(final Memory that);
 
 }
diff --git a/src/main/java/org/apache/datasketches/quantiles/DoublesUnionImplR.java b/src/main/java/org/apache/datasketches/quantiles/DoublesUnionImplR.java
index 0614d1a6..c497387e 100644
--- a/src/main/java/org/apache/datasketches/quantiles/DoublesUnionImplR.java
+++ b/src/main/java/org/apache/datasketches/quantiles/DoublesUnionImplR.java
@@ -154,8 +154,8 @@ class DoublesUnionImplR extends DoublesUnion {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
-    return (gadget_ == null) ? false : gadget_.isSameResource(that);
+  public long nativeOverlap(final Memory that) {
+    return (gadget_ == null) ? 0 : gadget_.nativeOverlap(that);
   }
 
 }
diff --git a/src/main/java/org/apache/datasketches/theta/AnotBimpl.java b/src/main/java/org/apache/datasketches/theta/AnotBimpl.java
index 06c6812f..779d89be 100644
--- a/src/main/java/org/apache/datasketches/theta/AnotBimpl.java
+++ b/src/main/java/org/apache/datasketches/theta/AnotBimpl.java
@@ -151,8 +151,8 @@ final class AnotBimpl extends AnotB {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
-    return false;
+  public long nativeOverlap(final Memory that) {
+    return 0;
   }
 
   //restricted
diff --git a/src/main/java/org/apache/datasketches/theta/DirectCompactSketch.java b/src/main/java/org/apache/datasketches/theta/DirectCompactSketch.java
index 09bcd1a1..986b88ff 100644
--- a/src/main/java/org/apache/datasketches/theta/DirectCompactSketch.java
+++ b/src/main/java/org/apache/datasketches/theta/DirectCompactSketch.java
@@ -131,8 +131,8 @@ class DirectCompactSketch extends CompactSketch {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
-    return mem_.isSameResource(that);
+  public long nativeOverlap(final Memory that) {
+    return mem_.nativeOverlap(that);
   }
 
   @Override
diff --git a/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java b/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java
index 580a5b29..1fc7bada 100644
--- a/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java
+++ b/src/main/java/org/apache/datasketches/theta/DirectQuickSelectSketchR.java
@@ -157,8 +157,8 @@ class DirectQuickSelectSketchR extends UpdateSketch {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
-    return wmem_.isSameResource(that);
+  public long nativeOverlap(final Memory that) {
+    return wmem_.nativeOverlap(that);
   }
 
   @Override
diff --git a/src/main/java/org/apache/datasketches/theta/IntersectionImpl.java b/src/main/java/org/apache/datasketches/theta/IntersectionImpl.java
index 901ec42c..cf776f11 100644
--- a/src/main/java/org/apache/datasketches/theta/IntersectionImpl.java
+++ b/src/main/java/org/apache/datasketches/theta/IntersectionImpl.java
@@ -345,8 +345,8 @@ class IntersectionImpl extends Intersection {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
-    return wmem_ != null ? wmem_.isSameResource(that) : false;
+  public long nativeOverlap(final Memory that) {
+    return wmem_ != null ? wmem_.nativeOverlap(that) : 0;
   }
 
   @Override
diff --git a/src/main/java/org/apache/datasketches/theta/SetOperation.java b/src/main/java/org/apache/datasketches/theta/SetOperation.java
index d406b005..3556d1b0 100644
--- a/src/main/java/org/apache/datasketches/theta/SetOperation.java
+++ b/src/main/java/org/apache/datasketches/theta/SetOperation.java
@@ -238,18 +238,15 @@ public abstract class SetOperation {
   public abstract Family getFamily();
 
   /**
-   * Returns true if the backing resource of <i>this</i> is identical with the backing resource
-   * of <i>that</i>. The capacities must be the same.  If <i>this</i> is a region,
-   * the region offset must also be the same.
-   *
-   * <p>Note: Only certain set operators during stateful operations can be serialized.
-   * Only when they are stored into Memory will this be relevant.</p>
-   *
-   * @param that A different non-null object
-   * @return true if the backing resource of <i>this</i> is the same as the backing resource
-   * of <i>that</i>.
+   * Returns a positive number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &le; <i>that</i>
+   * base address.
+   * Returns a negative number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &gt; <i>that</i>
+   * base address.
+   * Returns a zero if there is no overlap or if one or both objects are null, not active or on heap.
+   * @param that the other BaseState object
+   * @return a long value representing the ordering and size of overlap between <i>this</i> and <i>that</i>.
    */
-  public abstract boolean isSameResource(Memory that);
+  public abstract long nativeOverlap(Memory that);
 
   //restricted
 
diff --git a/src/main/java/org/apache/datasketches/theta/Sketch.java b/src/main/java/org/apache/datasketches/theta/Sketch.java
index f55fbb4d..428a833d 100644
--- a/src/main/java/org/apache/datasketches/theta/Sketch.java
+++ b/src/main/java/org/apache/datasketches/theta/Sketch.java
@@ -407,15 +407,16 @@ public abstract class Sketch {
   public abstract boolean isOrdered();
 
   /**
-   * Returns true if the backing resource of <i>this</i> is identical with the backing resource
-   * of <i>that</i>. The capacities must be the same.  If <i>this</i> is a region,
-   * the region offset must also be the same.
-   * @param that A different non-null object
-   * @return true if the backing resource of <i>this</i> is the same as the backing resource
-   * of <i>that</i>.
-   */
-  public boolean isSameResource(final Memory that) {
-    return false;
+   * Returns a positive number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &le; <i>that</i>
+   * base address.
+   * Returns a negative number if <i>this</i> overlaps <i>that</i> and <i>this</i> base address is &gt; <i>that</i>
+   * base address.
+   * Returns a zero if there is no overlap or if one or both objects are null, not active or on heap.
+   * @param that the other BaseState object
+   * @return a long value representing the ordering and size of overlap between <i>this</i> and <i>that</i>.
+   */
+  public long nativeOverlap(final Memory that) {
+    return 0;
   }
 
   /**
diff --git a/src/main/java/org/apache/datasketches/theta/UnionImpl.java b/src/main/java/org/apache/datasketches/theta/UnionImpl.java
index 2b2edee9..45d51ba6 100644
--- a/src/main/java/org/apache/datasketches/theta/UnionImpl.java
+++ b/src/main/java/org/apache/datasketches/theta/UnionImpl.java
@@ -262,9 +262,9 @@ final class UnionImpl extends Union {
   }
 
   @Override
-  public boolean isSameResource(final Memory that) {
+  public long nativeOverlap(final Memory that) {
     return gadget_ instanceof DirectQuickSelectSketchR
-        ? gadget_.getMemory().isSameResource(that) : false;
+        ? gadget_.getMemory().nativeOverlap(that) : 0;
   }
 
   @Override
diff --git a/src/test/java/org/apache/datasketches/cpc/CpcCBinariesTest.java b/src/test/java/org/apache/datasketches/cpc/CpcCBinariesTest.java
index 4166045d..6542316a 100644
--- a/src/test/java/org/apache/datasketches/cpc/CpcCBinariesTest.java
+++ b/src/test/java/org/apache/datasketches/cpc/CpcCBinariesTest.java
@@ -19,16 +19,18 @@
 
 package org.apache.datasketches.cpc;
 
+import static org.apache.datasketches.memory.Memory.map;
 import static org.apache.datasketches.Util.getResourceFile;
 import static org.testng.Assert.assertEquals;
 
 import java.io.File;
 import java.io.PrintStream;
 
-import org.apache.datasketches.memory.MapHandle;
 import org.apache.datasketches.memory.Memory;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 /**
  * Checks sketch images obtained from C++.
  * @author Lee Rhodes
@@ -41,10 +43,10 @@ public class CpcCBinariesTest {
   public void checkEmptyBin() {
     final String fileName = "cpc-empty.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory wmem = mh.get();
-      println(PreambleUtil.toString(wmem, true));
-      final CpcSketch sk = CpcSketch.heapify(wmem);
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      Memory mem = map(file, scope);
+      println(PreambleUtil.toString(mem, true));
+      final CpcSketch sk = CpcSketch.heapify(mem);
       assertEquals(sk.getFlavor(), Flavor.EMPTY);
     } catch (final Exception e) {
       e.printStackTrace();
@@ -55,8 +57,8 @@ public class CpcCBinariesTest {
   public void checkSparseBin() {
     final String fileName = "cpc-sparse.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       println("CPP GENERATED SKETCH FROM BINARY FILE LgK=11, U0 to U99");
       println("PreambleUtil.toString(mem, true)" + LS);
       println(PreambleUtil.toString(mem, true));
@@ -81,8 +83,8 @@ public class CpcCBinariesTest {
   public void checkHybridBin() {
     final String fileName = "cpc-hybrid.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem =  Memory.map(file, scope);
       println("CPP GENERATED SKETCH FROM BINARY FILE LgK=11, U0 to U199");
       println("PreambleUtil.toString(mem, true)" + LS);
       println(PreambleUtil.toString(mem, true));
@@ -107,8 +109,8 @@ public class CpcCBinariesTest {
   public void checkPinnedBin() {
     final String fileName = "cpc-pinned.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       println("CPP GENERATED SKETCH FROM BINARY FILE LgK=11, U0 to U1999");
       println("PreambleUtil.toString(mem, true)" + LS);
       println(PreambleUtil.toString(mem, true));
@@ -133,8 +135,8 @@ public class CpcCBinariesTest {
   public void checkSlidingBin() {
     final String fileName = "cpc-sliding.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       println("CPP GENERATED SKETCH FROM BINARY FILE LgK=11, U0 to U19999");
       println("PreambleUtil.toString(mem, true)" + LS);
       println(PreambleUtil.toString(mem, true));
@@ -161,8 +163,8 @@ public class CpcCBinariesTest {
   public void checkEmptyImages() {
     final String fileName = "cpc-empty.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       final int cap = (int) mem.getCapacity();
       final byte[] memByteArr = new byte[cap];
       mem.getByteArray(0, memByteArr, 0, cap);
@@ -181,8 +183,8 @@ public class CpcCBinariesTest {
   public void checkSparseImages() {
     final String fileName = "cpc-sparse.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       final int cap = (int) mem.getCapacity();
       final byte[] memByteArr = new byte[cap];
       mem.getByteArray(0, memByteArr, 0, cap);
@@ -202,8 +204,8 @@ public class CpcCBinariesTest {
   public void checkHybridImages() {
     final String fileName = "cpc-hybrid.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       final int cap = (int) mem.getCapacity();
       final byte[] memByteArr = new byte[cap];
       mem.getByteArray(0, memByteArr, 0, cap);
@@ -223,8 +225,8 @@ public class CpcCBinariesTest {
   public void checkPinnedImages() {
     final String fileName = "cpc-pinned.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       final int cap = (int) mem.getCapacity();
       final byte[] cppMemByteArr = new byte[cap];
       mem.getByteArray(0, cppMemByteArr, 0, cap);
@@ -244,8 +246,8 @@ public class CpcCBinariesTest {
   public void checkSlidingImages() {
     final String fileName = "cpc-sliding.sk";
     final File file = getResourceFile(fileName);
-    try (MapHandle mh = Memory.map(file)) {
-      final Memory mem = mh.get();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      final Memory mem = Memory.map(file, scope);
       final int cap = (int) mem.getCapacity();
       final byte[] memByteArr = new byte[cap];
       mem.getByteArray(0, memByteArr, 0, cap);
diff --git a/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java b/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java
index 8e24c555..4f545861 100644
--- a/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java
+++ b/src/test/java/org/apache/datasketches/cpc/PreambleUtilTest.java
@@ -98,7 +98,10 @@ public class PreambleUtilTest {
 
     format = Format.EMPTY_MERGED;
     putEmptyMerged(wmem, lgK, seedHash);
-    println(CpcSketch.toString((byte[])wmem.getArray(), true));
+    int cap = (int)wmem.getCapacity();
+    byte[] byteArr = new byte[cap];
+    wmem.getByteArray(0, byteArr, 0, cap);
+    println(CpcSketch.toString((byteArr), true));
     checkFirst8(wmem, format, lgK, (byte) 0);
     assertFalse(hasHip(wmem));
 
diff --git a/src/test/java/org/apache/datasketches/hash/MurmurHash3v2Test.java b/src/test/java/org/apache/datasketches/hash/MurmurHash3v2Test.java
index 23f369e6..f8f1d1ce 100644
--- a/src/test/java/org/apache/datasketches/hash/MurmurHash3v2Test.java
+++ b/src/test/java/org/apache/datasketches/hash/MurmurHash3v2Test.java
@@ -28,7 +28,7 @@ import static org.testng.Assert.fail;
 import org.testng.annotations.Test;
 
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.MurmurHash3v2;
+import org.apache.datasketches.memory.MurmurHash3;
 import org.apache.datasketches.memory.WritableMemory;
 
 /**
@@ -154,25 +154,25 @@ public class MurmurHash3v2Test {
   }
 
   private static final long[] hashV2(long[] key, long seed) {
-    return MurmurHash3v2.hash(key, seed);
+    return org.apache.datasketches.memory.MurmurHash3.hash(key, seed);
   }
 
   private static final long[] hashV2(int[] key2, long seed) {
-    return MurmurHash3v2.hash(key2, seed);
+    return org.apache.datasketches.memory.MurmurHash3.hash(key2, seed);
   }
 
   private static final long[] hashV2(char[] key, long seed) {
-    return MurmurHash3v2.hash(key, seed);
+    return org.apache.datasketches.memory.MurmurHash3.hash(key, seed);
   }
 
   private static final long[] hashV2(byte[] key, long seed) {
-    return MurmurHash3v2.hash(key, seed);
+    return org.apache.datasketches.memory.MurmurHash3.hash(key, seed);
   }
 
   //V2 single primitives
 
   private static final long[] hashV2(long key, long seed, long[] out) {
-    return MurmurHash3v2.hash(key, seed, out);
+    return org.apache.datasketches.memory.MurmurHash3.hash(key, seed, out);
   }
 
 //  private static final long[] hashV2(double key, long seed, long[] out) {
@@ -199,7 +199,7 @@ public class MurmurHash3v2Test {
 
     for (int offset = 0; offset < 16; offset++) {
       int arrLen = cap - offset;
-      hash1 = MurmurHash3v2.hash(wmem, offset, arrLen, seed, hash1);
+      hash1 = org.apache.datasketches.memory.MurmurHash3.hash(wmem, offset, arrLen, seed, hash1);
       byte[] byteArr2 = new byte[arrLen];
       wmem.getByteArray(offset, byteArr2, 0, arrLen);
       hash2 = MurmurHash3.hash(byteArr2, seed);
@@ -222,8 +222,8 @@ public class MurmurHash3v2Test {
       for (int i = 0; i < j; i++) { wmem.putByte(i, (byte) (-128 + i)); }
 
       long[] hash1 = MurmurHash3.hash(in, 0);
-      hash2 = MurmurHash3v2.hash(wmem, offset, bytes, seed, hash2);
-      long[] hash3 = MurmurHash3v2.hash(in, seed);
+      hash2 = org.apache.datasketches.memory.MurmurHash3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = org.apache.datasketches.memory.MurmurHash3.hash(in, seed);
 
       assertEquals(hash1, hash2);
       assertEquals(hash1, hash3);
@@ -246,8 +246,8 @@ public class MurmurHash3v2Test {
       for (int i = 0; i < j; i++) { wmem.putInt(i, i); }
 
       long[] hash1 = MurmurHash3.hash(in, 0);
-      hash2 = MurmurHash3v2.hash(wmem, offset, bytes, seed, hash2);
-      long[] hash3 = MurmurHash3v2.hash(in, seed);
+      hash2 = org.apache.datasketches.memory.MurmurHash3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = org.apache.datasketches.memory.MurmurHash3.hash(in, seed);
 
       assertEquals(hash1, hash2);
       assertEquals(hash1, hash3);
@@ -270,8 +270,8 @@ public class MurmurHash3v2Test {
       for (int i = 0; i < j; i++) { wmem.putInt(i, i); }
 
       long[] hash1 = MurmurHash3.hash(in, 0);
-      hash2 = MurmurHash3v2.hash(wmem, offset, bytes, seed, hash2);
-      long[] hash3 = MurmurHash3v2.hash(in, seed);
+      hash2 = org.apache.datasketches.memory.MurmurHash3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = org.apache.datasketches.memory.MurmurHash3.hash(in, seed);
 
       assertEquals(hash1, hash2);
       assertEquals(hash1, hash3);
@@ -294,8 +294,8 @@ public class MurmurHash3v2Test {
       for (int i = 0; i < j; i++) { wmem.putLong(i, i); }
 
       long[] hash1 = MurmurHash3.hash(in, 0);
-      hash2 = MurmurHash3v2.hash(wmem, offset, bytes, seed, hash2);
-      long[] hash3 = MurmurHash3v2.hash(in, seed);
+      hash2 = org.apache.datasketches.memory.MurmurHash3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = org.apache.datasketches.memory.MurmurHash3.hash(in, seed);
 
       assertEquals(hash1, hash2);
       assertEquals(hash1, hash3);
@@ -313,8 +313,8 @@ public class MurmurHash3v2Test {
     WritableMemory wmem = WritableMemory.writableWrap(in);
 
     long[] hash1 = MurmurHash3.hash(in, 0);
-    hash2 = MurmurHash3v2.hash(wmem, offset, bytes, seed, hash2);
-    long[] hash3 = MurmurHash3v2.hash(in, seed);
+    hash2 = org.apache.datasketches.memory.MurmurHash3.hash(wmem, offset, bytes, seed, hash2);
+    long[] hash3 = org.apache.datasketches.memory.MurmurHash3.hash(in, seed);
 
     assertEquals(hash1, hash2);
     assertEquals(hash1, hash3);
@@ -325,62 +325,62 @@ public class MurmurHash3v2Test {
     long seed = 123;
     long[] hashOut = new long[2];
     try {
-      MurmurHash3v2.hash(Memory.wrap(new long[0]), 0, 0, seed, hashOut);  //mem empty
+      org.apache.datasketches.memory.MurmurHash3.hash(Memory.wrap(new long[0]), 0, 0, seed, hashOut);  //mem empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       Memory mem = null;
-      MurmurHash3v2.hash(mem, 0, 0, seed, hashOut); //mem null
+      org.apache.datasketches.memory.MurmurHash3.hash(mem, 0, 0, seed, hashOut); //mem null
       fail();
-    } catch (final IllegalArgumentException e) { } //OK
+    } catch (final NullPointerException e) { } //OK
     try {
       String s = "";
-      MurmurHash3v2.hash(s, seed, hashOut); //string empty
+      org.apache.datasketches.memory.MurmurHash3.hash(s, seed, hashOut); //string empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       String s = null;
-      MurmurHash3v2.hash(s, seed, hashOut); //string null
+      org.apache.datasketches.memory.MurmurHash3.hash(s, seed, hashOut); //string null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       byte[] barr = new byte[0];
-      MurmurHash3v2.hash(barr, seed); //byte[] empty
+      org.apache.datasketches.memory.MurmurHash3.hash(barr, seed); //byte[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       byte[] barr = null;
-      MurmurHash3v2.hash(barr, seed); //byte[] null
+      org.apache.datasketches.memory.MurmurHash3.hash(barr, seed); //byte[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       char[] carr = new char[0];
-      MurmurHash3v2.hash(carr, seed); //char[] empty
+      org.apache.datasketches.memory.MurmurHash3.hash(carr, seed); //char[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       char[] carr = null;
-      MurmurHash3v2.hash(carr, seed); //char[] null
+      org.apache.datasketches.memory.MurmurHash3.hash(carr, seed); //char[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       int[] iarr = new int[0];
-      MurmurHash3v2.hash(iarr, seed); //int[] empty
+      org.apache.datasketches.memory.MurmurHash3.hash(iarr, seed); //int[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       int[] iarr = null;
-      MurmurHash3v2.hash(iarr, seed); //int[] null
+      org.apache.datasketches.memory.MurmurHash3.hash(iarr, seed); //int[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       long[] larr = new long[0];
-      MurmurHash3v2.hash(larr, seed); //long[] empty
+      org.apache.datasketches.memory.MurmurHash3.hash(larr, seed); //long[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       long[] larr = null;
-      MurmurHash3v2.hash(larr, seed); //long[] null
+      org.apache.datasketches.memory.MurmurHash3.hash(larr, seed); //long[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
   }
@@ -390,9 +390,9 @@ public class MurmurHash3v2Test {
     long seed = 123;
     long[] hashOut = new long[2];
     String s = "123";
-    assertTrue(MurmurHash3v2.hash(s, seed, hashOut)[0] != 0);
+    assertTrue(org.apache.datasketches.memory.MurmurHash3.hash(s, seed, hashOut)[0] != 0);
     long v = 123;
-    assertTrue(MurmurHash3v2.hash(v, seed, hashOut)[0] != 0);
+    assertTrue(org.apache.datasketches.memory.MurmurHash3.hash(v, seed, hashOut)[0] != 0);
   }
 
   @Test
@@ -420,8 +420,8 @@ public class MurmurHash3v2Test {
 
     WritableMemory wmem = WritableMemory.writableWrap(dataArr);
     long[] hash1 = MurmurHash3.hash(dataArr, 0);
-    hash2 = MurmurHash3v2.hash(wmem, offset, bytes, seed, hash2);
-    long[] hash3 = MurmurHash3v2.hash(dbl, seed, hash2);
+    hash2 = org.apache.datasketches.memory.MurmurHash3.hash(wmem, offset, bytes, seed, hash2);
+    long[] hash3 = org.apache.datasketches.memory.MurmurHash3.hash(dbl, seed, hash2);
 
     assertEquals(hash1, hash2);
     assertEquals(hash1, hash3);
diff --git a/src/test/java/org/apache/datasketches/hll/DirectAuxHashMapTest.java b/src/test/java/org/apache/datasketches/hll/DirectAuxHashMapTest.java
index f64ee56e..c5411b8d 100644
--- a/src/test/java/org/apache/datasketches/hll/DirectAuxHashMapTest.java
+++ b/src/test/java/org/apache/datasketches/hll/DirectAuxHashMapTest.java
@@ -26,14 +26,14 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
-import java.nio.ByteOrder;
 import java.util.HashMap;
 
 import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.SketchesStateException;
 
@@ -50,9 +50,8 @@ public class DirectAuxHashMapTest {
     int n = 8; //put lgConfigK == 4 into HLL mode
     int bytes = HllSketch.getMaxUpdatableSerializationBytes(lgConfigK, tgtHllType);
     HllSketch hllSketch;
-    try (WritableHandle handle = WritableMemory.allocateDirect(bytes,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      WritableMemory wmem = handle.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = WritableMemory.allocateDirect(bytes, scope, new DefaultMemoryRequestServer());
       hllSketch = new HllSketch(lgConfigK, tgtHllType, wmem);
       for (int i = 0; i < n; i++) {
         hllSketch.update(i);
@@ -65,7 +64,7 @@ public class DirectAuxHashMapTest {
       assertEquals(dha.getAuxHashMap().getLgAuxArrInts(), 2);
       assertTrue(hllSketch.isMemory());
       assertTrue(hllSketch.isOffHeap());
-      assertTrue(hllSketch.isSameResource(wmem));
+      assertTrue(hllSketch.nativeOverlap(wmem) != 0);
 
       //Check heapify
       byte[] byteArray = hllSketch.toCompactByteArray();
@@ -91,7 +90,7 @@ public class DirectAuxHashMapTest {
       assertEquals(dha.getAuxHashMap().getAuxCount(), 4);
       assertTrue(hllSketch.isMemory());
       assertFalse(hllSketch.isOffHeap());
-      assertFalse(hllSketch.isSameResource(wmem));
+      //assertFalse(hllSketch.nativeOverlap(wmem) == 0);
     } catch (final Exception e) {
       throw new RuntimeException(e);
     }
diff --git a/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java b/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java
index 38cbc497..92d42f7a 100644
--- a/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java
+++ b/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java
@@ -27,8 +27,9 @@ import static org.testng.Assert.assertTrue;
 
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 
 /**
@@ -70,8 +71,8 @@ public class DirectCouponListTest {
     //println("DIRECT");
     byte[] barr1;
     WritableMemory wmem = null;
-    try (WritableHandle hand = WritableMemory.allocateDirect(bytes)) {
-      wmem = hand.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+     wmem = WritableMemory.allocateDirect(bytes, scope, null);
       //byte[] byteArr = new byte[bytes];
       //WritableMemory wmem = WritableMemory.wrap(byteArr);
       hllSketch = new HllSketch(lgConfigK, tgtHllType, wmem);
@@ -85,7 +86,7 @@ public class DirectCouponListTest {
       assertEquals(hllSketch.getCurMode(), tgtMode);
       assertTrue(hllSketch.isMemory());
       assertTrue(hllSketch.isOffHeap());
-      assertTrue(hllSketch.isSameResource(wmem));
+      assertTrue(hllSketch.nativeOverlap(wmem) != 0);
 
       //convert direct sketch to byte[]
       barr1 = (compact) ? hllSketch.toCompactByteArray() : hllSketch.toUpdatableByteArray();
@@ -106,7 +107,7 @@ public class DirectCouponListTest {
     assertEquals(hllSketch2.getCurMode(), tgtMode);
     assertFalse(hllSketch2.isMemory());
     assertFalse(hllSketch2.isOffHeap());
-    assertFalse(hllSketch2.isSameResource(wmem));
+    assertFalse(hllSketch2.nativeOverlap(wmem) != 0); //out of scope
     byte[] barr2 = (compact) ? hllSketch2.toCompactByteArray() : hllSketch2.toUpdatableByteArray();
     assertEquals(barr1.length, barr2.length, barr1.length + ", " + barr2.length);
     //printDiffs(barr1, barr2);
diff --git a/src/test/java/org/apache/datasketches/hll/HllArrayTest.java b/src/test/java/org/apache/datasketches/hll/HllArrayTest.java
index cd64cc4d..c3c6f4be 100644
--- a/src/test/java/org/apache/datasketches/hll/HllArrayTest.java
+++ b/src/test/java/org/apache/datasketches/hll/HllArrayTest.java
@@ -102,10 +102,10 @@ public class HllArrayTest {
     assert sk1.hllSketchImpl instanceof AbstractHllArray;
     if (sk1.hllSketchImpl instanceof HllArray) {
       assertFalse(sk1.hllSketchImpl.isMemory());
-      assertFalse(sk1.isSameResource(wmem));
+      assertFalse(sk1.nativeOverlap(wmem) != 0);
     } else { //DirectHllArray
       assertTrue(sk1.hllSketchImpl.isMemory());
-      assertTrue(sk1.isSameResource(wmem));
+      assertTrue(sk1.nativeOverlap(wmem) != 0);
     }
 
     //sk1.update(u);
diff --git a/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java b/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java
index 6fbe287a..6b616e7e 100644
--- a/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java
+++ b/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java
@@ -110,7 +110,6 @@ public class PreambleUtilTest {
     HllSketch sk = new HllSketch(12);
     byte[] memObj = sk.toCompactByteArray();
     WritableMemory wmem = WritableMemory.writableWrap(memObj);
-    long memAdd = wmem.getCumulativeOffset(0);
     HllSketch bad;
 
     //checkFamily
@@ -149,7 +148,6 @@ public class PreambleUtilTest {
     for (int i = 1; i <= 15; i++) { sk.update(i); }
     memObj = sk.toCompactByteArray();
     wmem = WritableMemory.writableWrap(memObj);
-    memAdd = wmem.getCumulativeOffset(0);
 
     //check wrong PreInts and SET
     try {
@@ -163,7 +161,6 @@ public class PreambleUtilTest {
     for (int i = 15; i <= 1000; i++) { sk.update(i); }
     memObj = sk.toCompactByteArray();
     wmem = WritableMemory.writableWrap(memObj);
-    memAdd = wmem.getCumulativeOffset(0);
 
     //check wrong PreInts and HLL
     try {
@@ -179,8 +176,6 @@ public class PreambleUtilTest {
   public void checkExtractFlags() {
     int bytes = HllSketch.getMaxUpdatableSerializationBytes(4, TgtHllType.HLL_4);
     WritableMemory wmem = WritableMemory.allocate(bytes);
-    Object memObj = wmem.getArray();
-    long memAdd = wmem.getCumulativeOffset(0L);
     HllSketch sk = new HllSketch(4, TgtHllType.HLL_4, wmem);
     int flags = extractFlags(wmem);
     assertEquals(flags, EMPTY_FLAG_MASK);
diff --git a/src/test/java/org/apache/datasketches/hll/UnionTest.java b/src/test/java/org/apache/datasketches/hll/UnionTest.java
index ee58d902..ca201732 100644
--- a/src/test/java/org/apache/datasketches/hll/UnionTest.java
+++ b/src/test/java/org/apache/datasketches/hll/UnionTest.java
@@ -267,7 +267,7 @@ public class UnionTest {
     byte[] byteArr = srcU.toCompactByteArray();
     Memory mem = Memory.wrap(byteArr);
     Union dstU = Union.heapify(mem);
-    assertFalse(dstU.isSameResource(mem));
+    assertFalse(dstU.nativeOverlap(mem) != 0);
 
     assertEquals(dstU.getEstimate(), srcU.getEstimate(), 0.0);
   }
diff --git a/src/test/java/org/apache/datasketches/kll/KllSketchTest.java b/src/test/java/org/apache/datasketches/kll/KllSketchTest.java
index f99bf9cd..bb895387 100644
--- a/src/test/java/org/apache/datasketches/kll/KllSketchTest.java
+++ b/src/test/java/org/apache/datasketches/kll/KllSketchTest.java
@@ -133,11 +133,11 @@ public class KllSketchTest {
     WritableMemory reg1 = wmem.writableRegion(0, 64);
     WritableMemory reg2 = wmem.writableRegion(64, 64);
     assertFalse(reg1 == reg2);
-    assertFalse(reg1.isSameResource(reg2));
+    assertTrue(reg1.nativeOverlap(reg2) == 0); //on heap
 
     WritableMemory reg3 = wmem.writableRegion(0, 64);
     assertFalse(reg1 == reg3);
-    assertTrue(reg1.isSameResource(reg3));
+    assertTrue(reg1.nativeOverlap(reg3) == 0);  //on heap
 
     byte[] byteArr1 = KllFloatsSketch.newHeapInstance(20).toByteArray();
     reg1.putByteArray(0, byteArr1, 0, byteArr1.length);
@@ -145,13 +145,13 @@ public class KllSketchTest {
 
     byte[] byteArr2 = KllFloatsSketch.newHeapInstance(20).toByteArray();
     reg2.putByteArray(0, byteArr2, 0, byteArr2.length);
-    if (!sk1.isSameResource(reg2)) {
+    if (sk1.nativeOverlap(reg2) == 0) { //on heap
       KllFloatsSketch sk2 = KllFloatsSketch.wrap(reg2);
     }
 
     byte[] byteArr3 = KllFloatsSketch.newHeapInstance(20).toByteArray();
     reg3.putByteArray(0, byteArr3, 0, byteArr3.length);
-    if (!sk1.isSameResource(reg3)) {
+    if (sk1.nativeOverlap(reg3) != 0) { //on heap, so false
       KllFloatsSketch sk3 = KllFloatsSketch.wrap(reg3);
       fail();
     }
diff --git a/src/test/java/org/apache/datasketches/quantiles/DebugUnionTest.java b/src/test/java/org/apache/datasketches/quantiles/DebugUnionTest.java
index f480d698..6218d90d 100644
--- a/src/test/java/org/apache/datasketches/quantiles/DebugUnionTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/DebugUnionTest.java
@@ -27,13 +27,17 @@ import java.util.HashSet;
 
 import org.testng.annotations.Test;
 
-import org.apache.datasketches.memory.WritableHandle;
+import jdk.incubator.foreign.ResourceScope;
+
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 
 /**
  * @author Lee Rhodes
  */
 public class DebugUnionTest {
+  private MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
 
   @Test
   public void test() {
@@ -61,8 +65,8 @@ public class DebugUnionTest {
     DoublesSketch.setRandom(1); //make deterministic for test
     DoublesUnion dUnion;
     DoublesSketch dSketch;
-    try ( WritableHandle wdh = WritableMemory.allocateDirect(10_000_000) ) {
-      WritableMemory wmem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+        WritableMemory wmem = WritableMemory.allocateDirect(10_000_000, scope, memReqSvr);
       dUnion = DoublesUnion.builder().setMaxK(8).build(wmem);
       for (int s = 0; s < numSketches; s++) { dUnion.update(sketchArr[s]); }
       dSketch = dUnion.getResult(); //result is on heap
diff --git a/src/test/java/org/apache/datasketches/quantiles/DirectQuantilesMemoryRequestTest.java b/src/test/java/org/apache/datasketches/quantiles/DirectQuantilesMemoryRequestTest.java
index 5c2882c5..f4d921c3 100644
--- a/src/test/java/org/apache/datasketches/quantiles/DirectQuantilesMemoryRequestTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/DirectQuantilesMemoryRequestTest.java
@@ -29,8 +29,10 @@ import java.nio.ByteOrder;
 import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 
 /**
@@ -39,6 +41,7 @@ import org.apache.datasketches.memory.WritableMemory;
  * allocating larger Memory when requested and the actual freeing of the old memory allocations.
  */
 public class DirectQuantilesMemoryRequestTest {
+  private MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
 
   @Test
   public void checkLimitedMemoryScenarios() { //Requesting application
@@ -48,9 +51,8 @@ public class DirectQuantilesMemoryRequestTest {
 
     //########## Owning Implementation
     // This part would actually be part of the Memory owning implemention so it is faked here
-    try (WritableHandle wdh = WritableMemory.allocateDirect(initBytes,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      final WritableMemory wmem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = WritableMemory.allocateDirect(initBytes, 8, scope, ByteOrder.nativeOrder(), memReqSvr);
       println("Initial mem size: " + wmem.getCapacity());
 
       //########## Receiving Application
@@ -84,11 +86,9 @@ public class DirectQuantilesMemoryRequestTest {
     final int u = 32; // don't need the BB to fill here
     final int initBytes = (4 + (u / 2)) << 3; // not enough to hold everything
 
-    try (WritableHandle memHandler = WritableMemory.allocateDirect(initBytes,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      //final MemoryManager memMgr = new MemoryManager();
-      //final WritableMemory mem1 = memMgr.request(initBytes);
-      final WritableMemory mem1 = memHandler.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem1 = WritableMemory.allocateDirect(initBytes, 8, scope,
+            ByteOrder.nativeOrder(), memReqSvr);
       println("Initial mem size: " + mem1.getCapacity());
       final UpdateDoublesSketch usk1 = DoublesSketch.builder().setK(k).build(mem1);
       for (int i = 1; i <= u; i++) {
@@ -108,11 +108,9 @@ public class DirectQuantilesMemoryRequestTest {
     final int u = (2 * k) - 1; //just to fill the BB
     final int initBytes = ((2 * k) + 4) << 3; //just room for BB
 
-    try (WritableHandle memHandler = WritableMemory.allocateDirect(initBytes,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      //final MemoryManager memMgr = new MemoryManager();
-      //final WritableMemory mem1 = memMgr.request(initBytes);
-      final WritableMemory mem1 = memHandler.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem1 = WritableMemory.allocateDirect(initBytes, 8, scope,
+            ByteOrder.nativeOrder(), memReqSvr);
       println("Initial mem size: " + mem1.getCapacity());
       final UpdateDoublesSketch usk1 = DoublesSketch.builder().setK(k).build(mem1);
       for (int i = 1; i <= u; i++) {
@@ -138,12 +136,12 @@ public class DirectQuantilesMemoryRequestTest {
     final UpdateDoublesSketch usk1 = DoublesSketch.builder().setK(k).build();
     final Memory origSketchMem = Memory.wrap(usk1.toByteArray());
 
-    try (WritableHandle memHandle = WritableMemory.allocateDirect(initBytes,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      WritableMemory mem = memHandle.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = WritableMemory.allocateDirect(initBytes, 8, scope,
+            ByteOrder.nativeOrder(), memReqSvr);
       origSketchMem.copyTo(0, mem, 0, initBytes);
       UpdateDoublesSketch usk2 = DirectUpdateDoublesSketch.wrapInstance(mem);
-      assertTrue(mem.isSameResource(usk2.getMemory()));
+      assertTrue(mem.nativeOverlap(usk2.getMemory()) != 0);
       assertEquals(mem.getCapacity(), initBytes);
       assertTrue(mem.isDirect());
       assertTrue(usk2.isEmpty());
@@ -152,7 +150,7 @@ public class DirectQuantilesMemoryRequestTest {
       for (int i = 1; i <= 5; i++) { usk2.update(i); }
       assertEquals(usk2.getN(), 5);
       WritableMemory mem2 = usk2.getMemory();
-      assertFalse(mem.isSameResource(mem2));
+      assertFalse(mem.nativeOverlap(mem2) != 0);
       assertFalse(mem2.isDirect()); //should now be on-heap
 
       final int expectedSize = COMBINED_BUFFER + ((2 * k) << 3);
diff --git a/src/test/java/org/apache/datasketches/quantiles/DoublesSketchTest.java b/src/test/java/org/apache/datasketches/quantiles/DoublesSketchTest.java
index b8c2cab5..301d61fc 100644
--- a/src/test/java/org/apache/datasketches/quantiles/DoublesSketchTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/DoublesSketchTest.java
@@ -27,12 +27,15 @@ import static org.testng.Assert.assertTrue;
 import java.nio.ByteOrder;
 
 import org.apache.datasketches.memory.DefaultMemoryRequestServer;
-import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 public class DoublesSketchTest {
+  private MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
 
   @Test
   public void heapToDirect() {
@@ -116,12 +119,12 @@ public class DoublesSketchTest {
     WritableMemory cmem = WritableMemory.writableWrap(new byte[8]);
     DirectUpdateDoublesSketch duds =
             (DirectUpdateDoublesSketch) DoublesSketch.builder().setK(k).build(mem);
-    assertTrue(duds.isSameResource(mem));
+    assertTrue(duds.nativeOverlap(mem) != 0);
     DirectCompactDoublesSketch dcds = (DirectCompactDoublesSketch) duds.compact(cmem);
-    assertTrue(dcds.isSameResource(cmem));
+    assertTrue(dcds.nativeOverlap(cmem) != 0);
 
     UpdateDoublesSketch uds = DoublesSketch.builder().setK(k).build();
-    assertFalse(uds.isSameResource(mem));
+    assertFalse(uds.nativeOverlap(mem) != 0);
   }
 
   @Test
@@ -135,15 +138,14 @@ public class DoublesSketchTest {
 
   @Test
   public void directSketchShouldMoveOntoHeapEventually() {
-    try (WritableHandle wdh = WritableMemory.allocateDirect(1000,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      WritableMemory mem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = WritableMemory.allocateDirect(1000, 8, scope, ByteOrder.nativeOrder(), memReqSvr);
       UpdateDoublesSketch sketch = DoublesSketch.builder().build(mem);
-      Assert.assertTrue(sketch.isSameResource(mem));
+      Assert.assertTrue(sketch.nativeOverlap(mem) != 0);
       for (int i = 0; i < 1000; i++) {
         sketch.update(i);
       }
-      Assert.assertFalse(sketch.isSameResource(mem));
+      Assert.assertFalse(sketch.nativeOverlap(mem) != 0);
     } catch (final Exception e) {
       throw new RuntimeException(e);
     }
@@ -152,13 +154,12 @@ public class DoublesSketchTest {
   @Test
   public void directSketchShouldMoveOntoHeapEventually2() {
     int i = 0;
-    try (WritableHandle wdh =
-        WritableMemory.allocateDirect(50, ByteOrder.LITTLE_ENDIAN, new DefaultMemoryRequestServer())) {
-      WritableMemory mem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = WritableMemory.allocateDirect(50, 8, scope, ByteOrder.nativeOrder(), memReqSvr);
       UpdateDoublesSketch sketch = DoublesSketch.builder().build(mem);
-      Assert.assertTrue(sketch.isSameResource(mem));
+      Assert.assertTrue(sketch.nativeOverlap(mem) != 0);
       for (; i < 1000; i++) {
-        if (sketch.isSameResource(mem)) {
+        if (sketch.nativeOverlap(mem) != 0) {
           sketch.update(i);
         } else {
           //println("MOVED OUT at i = " + i);
@@ -172,8 +173,8 @@ public class DoublesSketchTest {
 
   @Test
   public void checkEmptyDirect() {
-    try (WritableHandle wdh = WritableMemory.allocateDirect(1000)) {
-      WritableMemory mem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = WritableMemory.allocateDirect(1000, 8, scope, ByteOrder.nativeOrder(), memReqSvr);
       UpdateDoublesSketch sketch = DoublesSketch.builder().build(mem);
       sketch.toByteArray(); //exercises a specific path
     } catch (final Exception e) {
diff --git a/src/test/java/org/apache/datasketches/quantiles/DoublesUnionImplTest.java b/src/test/java/org/apache/datasketches/quantiles/DoublesUnionImplTest.java
index 59f01078..529e2f05 100644
--- a/src/test/java/org/apache/datasketches/quantiles/DoublesUnionImplTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/DoublesUnionImplTest.java
@@ -692,19 +692,13 @@ public class DoublesUnionImplTest {
     assertEquals(bytesOut, byteArr); // wrapped, so should be exact
   }
 
-  @Test
-  public void isSameResourceHeap() {
-    DoublesUnion union = DoublesUnion.builder().build();
-    Assert.assertFalse(union.isSameResource(null));
-  }
-
   @Test
   public void isSameResourceDirect() {
     WritableMemory mem1 = WritableMemory.writableWrap(new byte[1000000]);
     DoublesUnion union = DoublesUnion.builder().build(mem1);
-    Assert.assertTrue(union.isSameResource(mem1));
+    Assert.assertTrue(union.nativeOverlap(mem1) != 0);
     WritableMemory mem2 = WritableMemory.writableWrap(new byte[1000000]);
-    Assert.assertFalse(union.isSameResource(mem2));
+    Assert.assertFalse(union.nativeOverlap(mem2) != 0);
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java b/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java
index be2f328b..80e326da 100644
--- a/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java
@@ -39,17 +39,21 @@ import static org.testng.Assert.assertEquals;
 
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 
 public class PreambleUtilTest {
+  private MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
 
   @Test
   public void checkInsertsAndExtracts() {
     final int bytes = 32;
-    try (WritableHandle offHeapMemHandler = WritableMemory.allocateDirect(bytes)) {
-      final WritableMemory offHeapMem = offHeapMemHandler.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory offHeapMem = WritableMemory.allocateDirect(bytes, scope, memReqSvr);
       final WritableMemory onHeapMem = WritableMemory.writableWrap(new byte[bytes]);
 
       onHeapMem.clear();
diff --git a/src/test/java/org/apache/datasketches/theta/CompactSketchTest.java b/src/test/java/org/apache/datasketches/theta/CompactSketchTest.java
index f4c7f0b4..2cce419d 100644
--- a/src/test/java/org/apache/datasketches/theta/CompactSketchTest.java
+++ b/src/test/java/org/apache/datasketches/theta/CompactSketchTest.java
@@ -27,15 +27,19 @@ import static org.testng.Assert.assertTrue;
 
 import org.apache.datasketches.Family;
 import org.apache.datasketches.SketchesArgumentException;
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 /**
  * @author Lee Rhodes
  */
 public class CompactSketchTest {
+  private MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
 
   @Test
   public void checkHeapifyWrap() {
@@ -77,8 +81,8 @@ public class CompactSketchTest {
     //Prepare Memory for direct
     int bytes = usk.getCompactBytes(); //for Compact
 
-    try (WritableHandle wdh = WritableMemory.allocateDirect(bytes)) {
-      WritableMemory directMem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory directMem = WritableMemory.allocateDirect(bytes, scope, memReqSvr);
 
       /**Via CompactSketch.compact**/
       refSk = usk.compact(ordered, directMem);
diff --git a/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java b/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java
index 266d7ef0..eff7a550 100644
--- a/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java
+++ b/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java
@@ -46,21 +46,25 @@ import org.apache.datasketches.HashOperations;
 import org.apache.datasketches.ResizeFactor;
 import org.apache.datasketches.SketchesArgumentException;
 import org.apache.datasketches.SketchesReadOnlyException;
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 /**
  * @author Lee Rhodes
  */
 public class DirectQuickSelectSketchTest {
+  private static  MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
 
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkBadSerVer() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -85,8 +89,8 @@ public class DirectQuickSelectSketchTest {
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkConstructorKtooSmall() {
     int k = 8;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
       UpdateSketch.builder().setNominalEntries(k).build(mem);
     } catch (final Exception e) {
       if (e instanceof SketchesArgumentException) {}
@@ -97,8 +101,8 @@ public class DirectQuickSelectSketchTest {
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkConstructorMemTooSmall() {
     int k = 16;
-    try (WritableHandle h = makeNativeMemory(k/2)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k/2, scope);
       UpdateSketch.builder().setNominalEntries(k).build(mem);
     } catch (final Exception e) {
       if (e instanceof SketchesArgumentException) {}
@@ -125,8 +129,8 @@ public class DirectQuickSelectSketchTest {
     int u = 2*k;
     boolean estimating = (u > k);
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch sk1 = UpdateSketch.builder().setNominalEntries(k).build(mem);
       for (int i=0; i<u; i++) { sk1.update(i); }
@@ -197,8 +201,8 @@ public class DirectQuickSelectSketchTest {
     int k = 512;
     long seed1 = 1021;
     long seed2 = DEFAULT_UPDATE_SEED;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setSeed(seed1).setNominalEntries(k).build(mem);
       byte[] byteArray = usk.toByteArray();
@@ -213,8 +217,8 @@ public class DirectQuickSelectSketchTest {
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkCorruptLgNomLongs() {
     int k = 16;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
       UpdateSketch.builder().setNominalEntries(k).build(mem);
       mem.putByte(LG_NOM_LONGS_BYTE, (byte)2); //corrupt
       Sketch.heapify(mem, DEFAULT_UPDATE_SEED);
@@ -227,8 +231,8 @@ public class DirectQuickSelectSketchTest {
   @Test
   public void checkHeapifyByteArrayExact() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
 
@@ -260,8 +264,8 @@ public class DirectQuickSelectSketchTest {
   public void checkHeapifyByteArrayEstimating() {
     int k = 4096;
     int u = 2*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
 
       for (int i=0; i<u; i++) { usk.update(i); }
@@ -291,8 +295,8 @@ public class DirectQuickSelectSketchTest {
     int u = 2*k;
     boolean estimating = (u > k);
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
       UpdateSketch sk1 = UpdateSketch.builder().setNominalEntries(k).build(mem);
       for (int i=0; i<u; i++) { sk1.update(i); }
 
@@ -318,8 +322,8 @@ public class DirectQuickSelectSketchTest {
     int k = 512;
     int u = 4*k;
     boolean estimating = (u > k);
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -388,8 +392,8 @@ public class DirectQuickSelectSketchTest {
   @Test
   public void checkDQStoCompactEmptyForms() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
 
@@ -434,8 +438,8 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     int u = 2*k;
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -455,8 +459,8 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     float p = (float)0.5;
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setP(p).setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -481,8 +485,8 @@ public class DirectQuickSelectSketchTest {
   @Test
   public void checkErrorBounds() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
 
@@ -517,8 +521,8 @@ public class DirectQuickSelectSketchTest {
     //virgin, p = 1.0
     int k = 1024;
     float p = (float)1.0;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setP(p).setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -557,8 +561,8 @@ public class DirectQuickSelectSketchTest {
   public void checkUpperAndLowerBounds() {
     int k = 512;
     int u = 2*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
 
@@ -578,8 +582,8 @@ public class DirectQuickSelectSketchTest {
   public void checkRebuild() {
     int k = 512;
     int u = 4*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -607,8 +611,8 @@ public class DirectQuickSelectSketchTest {
   public void checkResetAndStartingSubMultiple() {
     int k = 512;
     int u = 4*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -638,8 +642,8 @@ public class DirectQuickSelectSketchTest {
   public void checkExactModeMemoryArr() {
     int k = 4096;
     int u = 4096;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -659,8 +663,8 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     int u = 2*k;
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory mem = makeNativeMemory(k, scope);
 
       UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(mem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
@@ -680,10 +684,9 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     int u = 2*k;
     int memCapacity = (k << 4) + (Family.QUICKSELECT.getMinPreLongs() << 3);
-
-    try(WritableHandle memHandler = WritableMemory.allocateDirect(memCapacity)) {
-
-      UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(memHandler.getWritable());
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = WritableMemory.allocateDirect(memCapacity, scope, memReqSvr);
+      UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for internal checks
       assertTrue(usk.isEmpty());
 
@@ -702,8 +705,9 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     int u = 2*k;
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(h.getWritable());
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = makeNativeMemory(k, scope);
+      UpdateSketch usk = UpdateSketch.builder().setNominalEntries(k).build(wmem);
       assertTrue(usk.isEmpty());
 
       for (int i = 0; i< u; i++) { usk.update(i); } //force estimation
@@ -871,12 +875,12 @@ public class DirectQuickSelectSketchTest {
     int k = 1 << 12;
     int u = 2 * k;
     int bytes = Sketches.getMaxUpdateSketchBytes(k);
-      try (WritableHandle wdh = WritableMemory.allocateDirect(bytes/2)) { //will request
-      WritableMemory wmem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = WritableMemory.allocateDirect(bytes/2, scope, memReqSvr); //will request
       UpdateSketch sketch = Sketches.updateSketchBuilder().setNominalEntries(k).build(wmem);
-      assertTrue(sketch.isSameResource(wmem));
+      assertTrue(sketch.nativeOverlap(wmem) != 0);
       for (int i = 0; i < u; i++) { sketch.update(i); }
-      assertFalse(sketch.isSameResource(wmem));
+      assertFalse(sketch.nativeOverlap(wmem) != 0);
     } catch (final Exception e) {
       throw new RuntimeException(e);
     }
@@ -887,8 +891,8 @@ public class DirectQuickSelectSketchTest {
     int k = 1 << 12;
     int u = 2 * k;
     int bytes = Sketches.getMaxUpdateSketchBytes(k);
-    try (WritableHandle wdh = WritableMemory.allocateDirect(bytes/2)) { //will request
-      WritableMemory wmem = wdh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = WritableMemory.allocateDirect(bytes/2, scope, memReqSvr); //will request
       UpdateSketch sketch = Sketches.updateSketchBuilder().setNominalEntries(k).build(wmem);
       for (int i = 0; i < u; i++) { sketch.update(i); }
       double est1 = sketch.getEstimate();
@@ -932,8 +936,8 @@ public class DirectQuickSelectSketchTest {
     return (k << 4) + (Family.QUICKSELECT.getMinPreLongs() << 3);
   }
 
-  private static WritableHandle makeNativeMemory(int k) {
-    return WritableMemory.allocateDirect(getMaxBytes(k));
+  private static WritableMemory makeNativeMemory(int k, ResourceScope scope) {
+    return WritableMemory.allocateDirect(getMaxBytes(k), scope, memReqSvr);
   }
 
 }
diff --git a/src/test/java/org/apache/datasketches/theta/HeapIntersectionTest.java b/src/test/java/org/apache/datasketches/theta/HeapIntersectionTest.java
index eb8376ce..74483a74 100644
--- a/src/test/java/org/apache/datasketches/theta/HeapIntersectionTest.java
+++ b/src/test/java/org/apache/datasketches/theta/HeapIntersectionTest.java
@@ -81,7 +81,7 @@ public class HeapIntersectionTest {
     rsk1 = inter.getResult(ordered, mem);
     assertEquals(rsk1.getEstimate(), 0.0);
 
-    assertFalse(inter.isSameResource(mem));
+    assertFalse(inter.nativeOverlap(mem) != 0);
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java b/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java
index 82b17d96..edd54ef2 100644
--- a/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java
+++ b/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java
@@ -24,14 +24,19 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.tuple.Util;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 public class HeapifyWrapSerVer1and2Test {
   private static final short defaultSeedHash = Util.computeSeedHash(DEFAULT_UPDATE_SEED);
+  private static MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
+  //private static ResourceScope scope = ResourceScope.newImplicitScope();
 
   @Test
   public void checkHeapifyCompactSketchAssumedDefaultSeed() {
@@ -281,32 +286,32 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
     CompactSketch sv3csk = sv3usk.compact();
+    WritableMemory wmem;
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable());
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
   }
 
   @Test
@@ -317,32 +322,32 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
+    WritableMemory wmem;
     CompactSketch sv3csk = sv3usk.compact();
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable());
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), defaultSeedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
   }
 
   @Test
@@ -353,32 +358,32 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
+    WritableMemory wmem;
     CompactSketch sv3csk = sv3usk.compact();
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {/* ignore */}
+    try { wmem.close(); } catch (Exception e) {/* ignore */}
   }
 
   @Test
@@ -389,32 +394,32 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
+    WritableMemory wmem;
     CompactSketch sv3csk = sv3usk.compact();
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = Sketches.wrapCompactSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = Sketches.wrapCompactSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
   }
 
   @Test
@@ -425,32 +430,32 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
+    WritableMemory wmem;
     CompactSketch sv3csk = sv3usk.compact();
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable());
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
   }
 
   @Test
@@ -461,32 +466,32 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
+    WritableMemory wmem;
     CompactSketch sv3csk = sv3usk.compact();
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable());
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable());
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), defaultSeedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
   }
 
   @Test
@@ -497,32 +502,32 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
+    WritableMemory wmem;
     CompactSketch sv3csk = sv3usk.compact();
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
   }
 
   @Test
@@ -533,40 +538,40 @@ public class HeapifyWrapSerVer1and2Test {
     UpdateSketch sv3usk = UpdateSketch.builder().setNominalEntries(k).setSeed(seed).build();
     for (int i=0; i<k; i++) { sv3usk.update(i); }
     CompactSketch sv3cskResult;
-    WritableHandle wh;
+    WritableMemory wmem;
     CompactSketch sv3csk = sv3usk.compact();
 
     //SV3 test
-    wh = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(Memory.wrap(sv3csk.toByteArray()));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertTrue(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV2 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer2(sv3csk, seed));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
 
     //SV1 test
-    wh = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
-    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wh.getWritable(), seed);
+    wmem = putOffHeap(BackwardConversions.convertSerVer3toSerVer1(sv3csk));
+    sv3cskResult = (CompactSketch) Sketches.wrapSketch(wmem, seed);
     assertEquals(sv3cskResult.getEstimate(), sv3usk.getEstimate());
     assertEquals(sv3cskResult.getSeedHash(), seedHash);
     assertFalse(sv3cskResult.isDirect());
-    try { wh.close(); } catch (Exception e) {}
+    try { wmem.close(); } catch (Exception e) {}
   }
 
-  private static WritableHandle putOffHeap(Memory heapMem) {
+  private static WritableMemory putOffHeap(Memory heapMem) {
     final long cap = heapMem.getCapacity();
-    WritableHandle wh = WritableMemory.allocateDirect(cap);
-    WritableMemory wmem = wh.getWritable();
+    ResourceScope scope = ResourceScope.newConfinedScope();
+    WritableMemory wmem = WritableMemory.allocateDirect(cap, scope, memReqSvr);
     heapMem.copyTo(0, wmem, 0, cap);
-    return wh;
+    return wmem;
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/theta/SetOperationTest.java b/src/test/java/org/apache/datasketches/theta/SetOperationTest.java
index 8ddac37a..a974fa40 100644
--- a/src/test/java/org/apache/datasketches/theta/SetOperationTest.java
+++ b/src/test/java/org/apache/datasketches/theta/SetOperationTest.java
@@ -320,16 +320,16 @@ public class SetOperationTest {
     final WritableMemory wmem = WritableMemory.writableWrap(new byte[k*16 + 32]);
     final Memory roCompactMem = Memory.wrap(new byte[8]);
     final Union union = Sketches.setOperationBuilder().setNominalEntries(k).buildUnion(wmem);
-    assertTrue(union.isSameResource(wmem));
-    assertFalse(union.isSameResource(roCompactMem));
+    assertTrue(union.nativeOverlap(wmem) != 0);
+    assertFalse(union.nativeOverlap(roCompactMem) != 0);
 
     final Intersection inter = Sketches.setOperationBuilder().buildIntersection(wmem);
-    assertTrue(inter.isSameResource(wmem));
-    assertFalse(inter.isSameResource(roCompactMem));
+    assertTrue(inter.nativeOverlap(wmem) != 0);
+    assertFalse(inter.nativeOverlap(roCompactMem) != 0);
 
     final AnotB aNotB = Sketches.setOperationBuilder().buildANotB();
 
-    assertFalse(aNotB.isSameResource(roCompactMem));
+    assertFalse(aNotB.nativeOverlap(roCompactMem) != 0);
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/theta/SketchTest.java b/src/test/java/org/apache/datasketches/theta/SketchTest.java
index d57632d8..d725d545 100644
--- a/src/test/java/org/apache/datasketches/theta/SketchTest.java
+++ b/src/test/java/org/apache/datasketches/theta/SketchTest.java
@@ -325,17 +325,17 @@ public class SketchTest {
     UpdateSketch sketch = Sketches.updateSketchBuilder().setNominalEntries(k).build(mem);
     sketch.update(1);
     sketch.update(2);
-    assertTrue(sketch.isSameResource(mem));
+    assertTrue(sketch.nativeOverlap(mem) != 0);
     DirectCompactSketch dcos = (DirectCompactSketch) sketch.compact(true, cmem);
-    assertTrue(dcos.isSameResource(cmem));
+    assertTrue(dcos.nativeOverlap(cmem) != 0);
     assertTrue(dcos.isOrdered());
     //never create 2 sketches with the same memory, so don't do as I do :)
     DirectCompactSketch dcs = (DirectCompactSketch) sketch.compact(false, cmem);
-    assertTrue(dcs.isSameResource(cmem));
+    assertTrue(dcs.nativeOverlap(cmem) != 0);
     assertFalse(dcs.isOrdered());
 
     Sketch sk = Sketches.updateSketchBuilder().setNominalEntries(k).build();
-    assertFalse(sk.isSameResource(mem));
+    assertFalse(sk.nativeOverlap(mem) != 0);
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/theta/UnionImplTest.java b/src/test/java/org/apache/datasketches/theta/UnionImplTest.java
index ffedc310..d68f64e3 100644
--- a/src/test/java/org/apache/datasketches/theta/UnionImplTest.java
+++ b/src/test/java/org/apache/datasketches/theta/UnionImplTest.java
@@ -28,12 +28,17 @@ import static org.testng.Assert.assertTrue;
 
 import org.apache.datasketches.SketchesArgumentException;
 import org.apache.datasketches.Util;
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+import org.apache.datasketches.memory.MemoryRequestServer;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 public class UnionImplTest {
+  private static  MemoryRequestServer memReqSvr = new DefaultMemoryRequestServer();
+
 
   @Test
   public void checkGetCurrentAndMaxBytes() {
@@ -176,21 +181,20 @@ public class UnionImplTest {
     final int k = 1 << 12;
     final int u = 2 * k;
     final int bytes = Sketches.getMaxUpdateSketchBytes(k);
-    try (WritableHandle wh = WritableMemory.allocateDirect(bytes/2);
-        WritableHandle wh2 = WritableMemory.allocateDirect(bytes/2) ) {
-      final WritableMemory wmem = wh.getWritable();
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = WritableMemory.allocateDirect(bytes/2, scope, memReqSvr);
+      WritableMemory wmem2 = WritableMemory.allocateDirect(bytes/2, scope, memReqSvr);
       final UpdateSketch sketch = Sketches.updateSketchBuilder().setNominalEntries(k).build(wmem);
-      assertTrue(sketch.isSameResource(wmem));
+      assertTrue(sketch.nativeOverlap(wmem) != 0);
 
-      final WritableMemory wmem2 = wh2.getWritable();
       final Union union = SetOperation.builder().buildUnion(wmem2);
-      assertTrue(union.isSameResource(wmem2));
+      assertTrue(union.nativeOverlap(wmem2) != 0);
 
       for (int i = 0; i < u; i++) { union.update(i); }
-      assertFalse(union.isSameResource(wmem));
+      assertFalse(union.nativeOverlap(wmem) != 0);
 
       final Union union2 = SetOperation.builder().buildUnion(); //on-heap union
-      assertFalse(union2.isSameResource(wmem2));  //obviously not
+      assertFalse(union2.nativeOverlap(wmem2) != 0);  //obviously not
     } catch (final Exception e) {
       throw new RuntimeException(e);
     }
@@ -214,8 +218,9 @@ public class UnionImplTest {
     final double est1 = sk.getEstimate();
 
     final int bytes = Sketches.getMaxCompactSketchBytes(sk.getRetainedEntries(true));
-    try (WritableHandle h = WritableMemory.allocateDirect(bytes)) {
-      final WritableMemory wmem = h.getWritable();
+
+    try (ResourceScope scope = ResourceScope.newConfinedScope()) {
+      WritableMemory wmem = WritableMemory.allocateDirect(bytes, scope, memReqSvr);
       final CompactSketch csk = sk.compact(true, wmem); //ordered, direct
       final Union union = Sketches.setOperationBuilder().buildUnion();
       union.union(csk);
diff --git a/src/test/java/org/apache/datasketches/theta/UpdateSketchTest.java b/src/test/java/org/apache/datasketches/theta/UpdateSketchTest.java
index e1988a1a..bbc5ee92 100644
--- a/src/test/java/org/apache/datasketches/theta/UpdateSketchTest.java
+++ b/src/test/java/org/apache/datasketches/theta/UpdateSketchTest.java
@@ -199,7 +199,6 @@ public class UpdateSketchTest {
     }
   }
 
-
   @SuppressWarnings("unused")
   @Test
   public void checkCompactOpsMemoryToCompact() {
@@ -218,8 +217,11 @@ public class UpdateSketchTest {
     csk1 = sk.compact(true, cskwmem1);
     csk2 = CompactOperations.memoryToCompact(skwmem, true, cskwmem2);
     csk3 = CompactOperations.memoryToCompact(cskwmem1, true, cskwmem3);
-    assertTrue(cskwmem1.equals(cskwmem2));
-    assertTrue(cskwmem1.equals(cskwmem3));
+    long mismatch = cskwmem1.mismatch(cskwmem2);
+    println(mismatch);
+    boolean eq = cskwmem1.equalTo(cskwmem2);
+    assertTrue(cskwmem1.equalTo(cskwmem2));
+    assertTrue(cskwmem1.equalTo(cskwmem3));
   }
 
   @Test
@@ -228,9 +230,9 @@ public class UpdateSketchTest {
   }
 
   /**
-   * @param s value to print
+   * @param o value to print
    */
-  static void println(String s) {
-    //System.out.println(s); //disable here
+  static void println(Object o) {
+    //System.out.println(o.toString()); //disable here
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org


[datasketches-java] 03/05: Merge branch 'master' into checkMemoryWith17

Posted by le...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch checkMemoryWith17
in repository https://gitbox.apache.org/repos/asf/datasketches-java.git

commit 2a772d9297bd7f098ce9dccaad0f1c397cb8e9ae
Merge: 9a2f0197 a749ec79
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Thu Jun 9 12:10:22 2022 -0700

    Merge branch 'master' into checkMemoryWith17

 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org