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

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


The following commit(s) were added to refs/heads/move_to_17_using_FFM by this 
push:
     new 5c7f5abf Changes in ds-java required to move to java 17 as ds-java 7.x
5c7f5abf is described below

commit 5c7f5abf9f58bebb9af0732bcec09dd7688d3dbf
Author: Lee Rhodes <[email protected]>
AuthorDate: Fri May 31 17:53:39 2024 -0700

    Changes in ds-java required to move to java 17 as ds-java 7.x
    
    and compatible with the new ds-memory branch integrateJava17_v3 ->
    ds-memory 3.X
---
 pom.xml                                            |  10 +-
 .../org/apache/datasketches/cpc/CpcSketch.java     |   2 +-
 .../apache/datasketches/hll/DirectHllArray.java    |   8 +-
 .../java/org/apache/datasketches/theta/Sketch.java |   6 +-
 .../org/apache/datasketches/theta/Sketches.java    |  12 +-
 .../filters/bloomfilter/BloomFilterTest.java       |  13 +-
 .../filters/bloomfilter/DirectBitArrayRTest.java   |   4 +-
 .../filters/bloomfilter/DirectBitArrayTest.java    |  12 +-
 ...rmurHash3v2Test.java => MurmurHash3v3Test.java} |  75 +++++----
 .../datasketches/hll/DirectAuxHashMapTest.java     |  14 +-
 .../datasketches/hll/DirectCouponListTest.java     |  11 +-
 .../apache/datasketches/hll/PreambleUtilTest.java  |   8 +-
 .../datasketches/quantiles/DebugUnionTest.java     |  12 +-
 .../DirectQuantilesMemoryRequestTest.java          |  58 +++----
 .../datasketches/quantiles/DoublesSketchTest.java  |  39 +++--
 .../datasketches/quantiles/PreambleUtilTest.java   |  13 +-
 .../datasketches/theta/CompactSketchTest.java      |  12 +-
 .../theta/DirectQuickSelectSketchTest.java         | 166 ++++++++++----------
 .../theta/HeapifyWrapSerVer1and2Test.java          | 171 +++++++++++----------
 .../apache/datasketches/theta/SketchesTest.java    |   2 +-
 .../apache/datasketches/theta/UnionImplTest.java   |  26 ++--
 .../datasketches/theta/UpdateSketchTest.java       |   4 +-
 22 files changed, 364 insertions(+), 314 deletions(-)

diff --git a/pom.xml b/pom.xml
index 35107f24..e43a426b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,7 +88,7 @@ under the License.
     <!-- END:UNIQUE FOR THIS JAVA COMPONENT -->
 
     <!-- Test -->
-    <testng.version>7.5.1</testng.version>
+    <testng.version>7.10.0</testng.version>
     <!-- these are TestNG groups used for excluding / including groups of 
tests. See profiles section. -->
     
<testng.generate-java-files>generate_java_files</testng.generate-java-files>
     <testng.check-cpp-files>check_cpp_files</testng.check-cpp-files>
@@ -96,7 +96,7 @@ under the License.
 
     <!-- System-wide properties -->
     <maven.version>3.6.3</maven.version> <!-- may override parent, used in 
enforcer plugin -->
-    <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>
@@ -134,12 +134,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>
@@ -193,7 +193,7 @@ under the License.
               <configuration>
                 <rules>
                   <requireJavaVersion>
-                    <version>[1.8.0,9.0),[11.0,12.0)</version>
+                    <version>[1.8.0,9.0),[11.0,12.0), [17,18)</version>
                   </requireJavaVersion>
                   <requireMavenVersion>
                     <version>[${maven.version},)</version>
diff --git a/src/main/java/org/apache/datasketches/cpc/CpcSketch.java 
b/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
index a374b574..4ed89dd1 100644
--- a/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
+++ b/src/main/java/org/apache/datasketches/cpc/CpcSketch.java
@@ -300,7 +300,7 @@ public final class CpcSketch {
     final long cap = state.getRequiredSerializedBytes();
     final WritableMemory wmem = WritableMemory.allocate((int) cap);
     state.exportToMemory(wmem);
-    return (byte[]) wmem.getArray();
+    return wmem.getArray();
   }
 
   /**
diff --git a/src/main/java/org/apache/datasketches/hll/DirectHllArray.java 
b/src/main/java/org/apache/datasketches/hll/DirectHllArray.java
index 5b3e1a4f..07835da6 100644
--- a/src/main/java/org/apache/datasketches/hll/DirectHllArray.java
+++ b/src/main/java/org/apache/datasketches/hll/DirectHllArray.java
@@ -56,7 +56,7 @@ abstract class DirectHllArray extends AbstractHllArray {
   WritableMemory wmem;
   Memory mem;
   Object memObj;
-  long memAdd;
+  //long memAdd;
   final boolean compact;
 
   private static int checkMemCompactFlag(final WritableMemory wmem, final int 
lgConfigK) {
@@ -70,7 +70,7 @@ abstract class DirectHllArray extends AbstractHllArray {
     this.wmem = wmem;
     mem = wmem;
     memObj = wmem.getArray();
-    memAdd = wmem.getCumulativeOffset(0L);
+    //memAdd = wmem.getCumulativeOffset(0L);
     compact = extractCompactFlag(mem);
     insertEmptyFlag(wmem, false);
   }
@@ -81,7 +81,7 @@ abstract class DirectHllArray extends AbstractHllArray {
     wmem = null;
     this.mem = mem;
     memObj = ((WritableMemory) mem).getArray();
-    memAdd = mem.getCumulativeOffset(0L);
+    //memAdd = mem.getCumulativeOffset(0L);
     compact = extractCompactFlag(mem);
   }
 
@@ -90,7 +90,7 @@ abstract class DirectHllArray extends AbstractHllArray {
     wmem = newWmem;
     mem = newWmem;
     memObj = wmem.getArray();
-    memAdd = wmem.getCumulativeOffset(0L);
+    //memAdd = wmem.getCumulativeOffset(0L);
   }
 
   @Override
diff --git a/src/main/java/org/apache/datasketches/theta/Sketch.java 
b/src/main/java/org/apache/datasketches/theta/Sketch.java
index cc1fd4d2..d13fe9b8 100644
--- a/src/main/java/org/apache/datasketches/theta/Sketch.java
+++ b/src/main/java/org/apache/datasketches/theta/Sketch.java
@@ -311,11 +311,11 @@ public abstract class Sketch {
    * log_base2 of the number of nominal entries, which is a power of 2.
    * @param lgNomEntries <a 
href="{@docRoot}/resources/dictionary.html#nomEntries">Nominal Entries</a>
    * @return the maximum number of storage bytes required for a CompactSketch 
with the given
-   * nomEntries.
+   * lgNomEntries.
    */
   public static int getCompactSketchMaxBytes(final int lgNomEntries) {
-    return (int)((2 << lgNomEntries) * ThetaUtil.REBUILD_THRESHOLD)
-        + Family.QUICKSELECT.getMaxPreLongs() * Long.BYTES;
+    return (int)((2 << lgNomEntries) * ThetaUtil.REBUILD_THRESHOLD
+        + Family.QUICKSELECT.getMaxPreLongs()) * Long.BYTES;
   }
 
   /**
diff --git a/src/main/java/org/apache/datasketches/theta/Sketches.java 
b/src/main/java/org/apache/datasketches/theta/Sketches.java
index 4b146187..077d9d5a 100644
--- a/src/main/java/org/apache/datasketches/theta/Sketches.java
+++ b/src/main/java/org/apache/datasketches/theta/Sketches.java
@@ -86,7 +86,7 @@ public final class Sketches {
    * @return the maximum number of storage bytes required for a CompactSketch 
with the given number
    * of entries.
    * @see Sketch#getMaxCompactSketchBytes(int)
-   * @deprecated as a public method. Use {@link #getCompactSketchMaxBytes(int) 
instead}
+   * @deprecated as a public method. Use {@link #getCompactSketchMaxBytes(int) 
getCompactSketchMaxBytes(int)} instead.
    */
   @Deprecated
   public static int getMaxCompactSketchBytes(final int numberOfEntries) {
@@ -95,14 +95,14 @@ public final class Sketches {
 
   /**
    * Returns the maximum number of storage bytes required for a CompactSketch 
given the configured
-   * number of nominal entries (power of 2).
-   * @param nomEntries <a 
href="{@docRoot}/resources/dictionary.html#nomEntries">Nominal Entries</a>
+   * log_base2 of the number of nominal entries, which is a power of 2.
+   * @param lgNomEntries <a 
href="{@docRoot}/resources/dictionary.html#nomEntries">Nominal Entries</a>
    * @return the maximum number of storage bytes required for a CompactSketch 
with the given
-   * nomEntries.
+   * lgNomEntries.
    * @see Sketch#getCompactSketchMaxBytes(int)
    */
-  public static int getCompactSketchMaxBytes(final int nomEntries) {
-    return Sketch.getCompactSketchMaxBytes(nomEntries);
+  public static int getCompactSketchMaxBytes(final int lgNomEntries) {
+    return Sketch.getCompactSketchMaxBytes(lgNomEntries);
   }
 
   /**
diff --git 
a/src/test/java/org/apache/datasketches/filters/bloomfilter/BloomFilterTest.java
 
b/src/test/java/org/apache/datasketches/filters/bloomfilter/BloomFilterTest.java
index dedaf9db..7a0fbb7f 100644
--- 
a/src/test/java/org/apache/datasketches/filters/bloomfilter/BloomFilterTest.java
+++ 
b/src/test/java/org/apache/datasketches/filters/bloomfilter/BloomFilterTest.java
@@ -24,14 +24,19 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertThrows;
 import static org.testng.Assert.assertTrue;
 
+import java.nio.ByteOrder;
+
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.SketchesArgumentException;
 import org.apache.datasketches.common.SketchesReadOnlyException;
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+//import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 public class BloomFilterTest {
 
   @Test
@@ -51,8 +56,10 @@ public class BloomFilterTest {
     assertFalse(bf1.isDirect());
     assertFalse(bf1.isReadOnly());
 
-    try (WritableHandle wh = WritableMemory.allocateDirect(sizeBytes)) {
-      final WritableMemory wmem = wh.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(sizeBytes,
+            new DefaultMemoryRequestServer())).scope()) {
+
       final BloomFilter bf2 = new BloomFilter(numBits, numHashes, seed, wmem);
       assertTrue(bf2.isEmpty());
       assertTrue(bf2.hasMemory());
diff --git 
a/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayRTest.java
 
b/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayRTest.java
index 521019e6..bbedd2fb 100644
--- 
a/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayRTest.java
+++ 
b/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayRTest.java
@@ -142,8 +142,8 @@ public class DirectBitArrayRTest {
 
     final Memory mem = bitArrayToMemory(hba);
     DirectBitArrayR dba = DirectBitArrayR.wrap(mem, hba.isEmpty());
-    assertThrows(AssertionError.class, () -> dba.getBit(-10));
-    assertThrows(AssertionError.class, () -> dba.getBit(2048));
+    assertThrows(IndexOutOfBoundsException.class, () -> dba.getBit(-10));
+    assertThrows(IndexOutOfBoundsException.class, () -> dba.getBit(2048));
   }
 
   @Test
diff --git 
a/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayTest.java
 
b/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayTest.java
index a45bcbb8..1df6cc9d 100644
--- 
a/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayTest.java
+++ 
b/src/test/java/org/apache/datasketches/filters/bloomfilter/DirectBitArrayTest.java
@@ -172,12 +172,12 @@ public class DirectBitArrayTest {
       dba.getAndSetBit(i);
     }
 
-    assertThrows(AssertionError.class, () -> dba.getBit(-10));
-    assertThrows(AssertionError.class, () -> dba.getBit(2048));
-    assertThrows(AssertionError.class, () -> dba.setBit(-20));
-    assertThrows(AssertionError.class, () -> dba.setBit(4096));
-    assertThrows(AssertionError.class, () -> dba.getAndSetBit(-30));
-    assertThrows(AssertionError.class, () -> dba.getAndSetBit(8192));
+    assertThrows(IndexOutOfBoundsException.class, () -> dba.getBit(-10));
+    assertThrows(IndexOutOfBoundsException.class, () -> dba.getBit(2048));
+    assertThrows(IndexOutOfBoundsException.class, () -> dba.setBit(-20));
+    assertThrows(IndexOutOfBoundsException.class, () -> dba.setBit(4096));
+    assertThrows(IndexOutOfBoundsException.class, () -> dba.getAndSetBit(-30));
+    assertThrows(IndexOutOfBoundsException.class, () -> 
dba.getAndSetBit(8192));
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/hash/MurmurHash3v2Test.java 
b/src/test/java/org/apache/datasketches/hash/MurmurHash3v3Test.java
similarity index 82%
rename from src/test/java/org/apache/datasketches/hash/MurmurHash3v2Test.java
rename to src/test/java/org/apache/datasketches/hash/MurmurHash3v3Test.java
index 23f369e6..8699a091 100644
--- a/src/test/java/org/apache/datasketches/hash/MurmurHash3v2Test.java
+++ b/src/test/java/org/apache/datasketches/hash/MurmurHash3v3Test.java
@@ -28,13 +28,13 @@ 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.internal.MurmurHash3v3;
 import org.apache.datasketches.memory.WritableMemory;
 
 /**
  * @author Lee Rhodes
  */
-public class MurmurHash3v2Test {
+public class MurmurHash3v3Test {
   private Random rand = new Random();
   private static final int trials = 1 << 20;
 
@@ -154,33 +154,33 @@ public class MurmurHash3v2Test {
   }
 
   private static final long[] hashV2(long[] key, long seed) {
-    return MurmurHash3v2.hash(key, seed);
+    return MurmurHash3v3.hash(key, seed);
   }
 
   private static final long[] hashV2(int[] key2, long seed) {
-    return MurmurHash3v2.hash(key2, seed);
+    return MurmurHash3v3.hash(key2, seed);
   }
 
   private static final long[] hashV2(char[] key, long seed) {
-    return MurmurHash3v2.hash(key, seed);
+    return MurmurHash3v3.hash(key, seed);
   }
 
   private static final long[] hashV2(byte[] key, long seed) {
-    return MurmurHash3v2.hash(key, seed);
+    return MurmurHash3v3.hash(key, seed);
   }
 
   //V2 single primitives
 
   private static final long[] hashV2(long key, long seed, long[] out) {
-    return MurmurHash3v2.hash(key, seed, out);
+    return MurmurHash3v3.hash(key, seed, out);
   }
 
 //  private static final long[] hashV2(double key, long seed, long[] out) {
-//    return MurmurHash3v2.hash(key, seed, out);
+//    return MurmurHash3v3.hash(key, seed, out);
 //  }
 
 //  private static final long[] hashV2(String key, long seed, long[] out) {
-//    return MurmurHash3v2.hash(key, seed, out);
+//    return MurmurHash3v3.hash(key, seed, 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 = MurmurHash3v3.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 = MurmurHash3v3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = MurmurHash3v3.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 = MurmurHash3v3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = MurmurHash3v3.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 = MurmurHash3v3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = MurmurHash3v3.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 = MurmurHash3v3.hash(wmem, offset, bytes, seed, hash2);
+      long[] hash3 = MurmurHash3v3.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 = MurmurHash3v3.hash(wmem, offset, bytes, seed, hash2);
+    long[] hash3 = MurmurHash3v3.hash(in, seed);
 
     assertEquals(hash1, hash2);
     assertEquals(hash1, hash3);
@@ -325,62 +325,57 @@ 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
-      fail();
-    } catch (final IllegalArgumentException e) { } //OK
-    try {
-      Memory mem = null;
-      MurmurHash3v2.hash(mem, 0, 0, seed, hashOut); //mem null
+      MurmurHash3v3.hash(Memory.wrap(new long[0]), 0, 0, seed, hashOut);  
//mem empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       String s = "";
-      MurmurHash3v2.hash(s, seed, hashOut); //string empty
+      MurmurHash3v3.hash(s, seed, hashOut); //string empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       String s = null;
-      MurmurHash3v2.hash(s, seed, hashOut); //string null
+      MurmurHash3v3.hash(s, seed, hashOut); //string null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       byte[] barr = new byte[0];
-      MurmurHash3v2.hash(barr, seed); //byte[] empty
+      MurmurHash3v3.hash(barr, seed); //byte[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       byte[] barr = null;
-      MurmurHash3v2.hash(barr, seed); //byte[] null
+      MurmurHash3v3.hash(barr, seed); //byte[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       char[] carr = new char[0];
-      MurmurHash3v2.hash(carr, seed); //char[] empty
+      MurmurHash3v3.hash(carr, seed); //char[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       char[] carr = null;
-      MurmurHash3v2.hash(carr, seed); //char[] null
+      MurmurHash3v3.hash(carr, seed); //char[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       int[] iarr = new int[0];
-      MurmurHash3v2.hash(iarr, seed); //int[] empty
+      MurmurHash3v3.hash(iarr, seed); //int[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       int[] iarr = null;
-      MurmurHash3v2.hash(iarr, seed); //int[] null
+      MurmurHash3v3.hash(iarr, seed); //int[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       long[] larr = new long[0];
-      MurmurHash3v2.hash(larr, seed); //long[] empty
+      MurmurHash3v3.hash(larr, seed); //long[] empty
       fail();
     } catch (final IllegalArgumentException e) { } //OK
     try {
       long[] larr = null;
-      MurmurHash3v2.hash(larr, seed); //long[] null
+      MurmurHash3v3.hash(larr, seed); //long[] null
       fail();
     } catch (final IllegalArgumentException e) { } //OK
   }
@@ -390,9 +385,9 @@ public class MurmurHash3v2Test {
     long seed = 123;
     long[] hashOut = new long[2];
     String s = "123";
-    assertTrue(MurmurHash3v2.hash(s, seed, hashOut)[0] != 0);
+    assertTrue(MurmurHash3v3.hash(s, seed, hashOut)[0] != 0);
     long v = 123;
-    assertTrue(MurmurHash3v2.hash(v, seed, hashOut)[0] != 0);
+    assertTrue(MurmurHash3v3.hash(v, seed, hashOut)[0] != 0);
   }
 
   @Test
@@ -420,8 +415,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 = MurmurHash3v3.hash(wmem, offset, bytes, seed, hash2);
+    long[] hash3 = MurmurHash3v3.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 78b18c1c..7b3cd5c6 100644
--- a/src/test/java/org/apache/datasketches/hll/DirectAuxHashMapTest.java
+++ b/src/test/java/org/apache/datasketches/hll/DirectAuxHashMapTest.java
@@ -31,12 +31,11 @@ import java.util.HashMap;
 
 import org.apache.datasketches.common.SketchesStateException;
 import org.apache.datasketches.memory.DefaultMemoryRequestServer;
-import org.testng.annotations.Test;
-
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
+import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
 
 /**
  * @author Lee Rhodes
@@ -48,11 +47,12 @@ public class DirectAuxHashMapTest {
     int lgConfigK = 4;
     TgtHllType tgtHllType = TgtHllType.HLL_4;
     int n = 8; //put lgConfigK == 4 into HLL mode
-    int bytes = HllSketch.getMaxUpdatableSerializationBytes(lgConfigK, 
tgtHllType);
+    long bytes = HllSketch.getMaxUpdatableSerializationBytes(lgConfigK, 
tgtHllType);
     HllSketch hllSketch;
-    try (WritableHandle handle = WritableMemory.allocateDirect(bytes,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      WritableMemory wmem = handle.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(bytes, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
       hllSketch = new HllSketch(lgConfigK, tgtHllType, wmem);
       for (int i = 0; i < n; i++) {
         hllSketch.update(i);
diff --git 
a/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java 
b/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java
index 38cbc497..c6c006f2 100644
--- a/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java
+++ b/src/test/java/org/apache/datasketches/hll/DirectCouponListTest.java
@@ -27,8 +27,11 @@ import static org.testng.Assert.assertTrue;
 
 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.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 
 /**
@@ -69,9 +72,9 @@ public class DirectCouponListTest {
 
     //println("DIRECT");
     byte[] barr1;
-    WritableMemory wmem = null;
-    try (WritableHandle hand = WritableMemory.allocateDirect(bytes)) {
-      wmem = hand.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(bytes,
+            new DefaultMemoryRequestServer())).scope()) {
       //byte[] byteArr = new byte[bytes];
       //WritableMemory wmem = WritableMemory.wrap(byteArr);
       hllSketch = new HllSketch(lgConfigK, tgtHllType, wmem);
diff --git a/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java 
b/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java
index cd1e0cbc..deb8c5be 100644
--- a/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java
+++ b/src/test/java/org/apache/datasketches/hll/PreambleUtilTest.java
@@ -109,7 +109,7 @@ public class PreambleUtilTest {
     HllSketch sk = new HllSketch(12);
     byte[] memObj = sk.toCompactByteArray();
     WritableMemory wmem = WritableMemory.writableWrap(memObj);
-    long memAdd = wmem.getCumulativeOffset(0);
+    //long memAdd = wmem.getCumulativeOffset(0);
     HllSketch bad;
 
     //checkFamily
@@ -148,7 +148,7 @@ public class PreambleUtilTest {
     for (int i = 1; i <= 15; i++) { sk.update(i); }
     memObj = sk.toCompactByteArray();
     wmem = WritableMemory.writableWrap(memObj);
-    memAdd = wmem.getCumulativeOffset(0);
+    //memAdd = wmem.getCumulativeOffset(0);
 
     //check wrong PreInts and SET
     try {
@@ -162,7 +162,7 @@ public class PreambleUtilTest {
     for (int i = 15; i <= 1000; i++) { sk.update(i); }
     memObj = sk.toCompactByteArray();
     wmem = WritableMemory.writableWrap(memObj);
-    memAdd = wmem.getCumulativeOffset(0);
+    //memAdd = wmem.getCumulativeOffset(0);
 
     //check wrong PreInts and HLL
     try {
@@ -179,7 +179,7 @@ public class PreambleUtilTest {
     int bytes = HllSketch.getMaxUpdatableSerializationBytes(4, 
TgtHllType.HLL_4);
     WritableMemory wmem = WritableMemory.allocate(bytes);
     Object memObj = wmem.getArray();
-    long memAdd = wmem.getCumulativeOffset(0L);
+    //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/quantiles/DebugUnionTest.java 
b/src/test/java/org/apache/datasketches/quantiles/DebugUnionTest.java
index bbf89f33..d19d3b47 100644
--- a/src/test/java/org/apache/datasketches/quantiles/DebugUnionTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/DebugUnionTest.java
@@ -23,10 +23,15 @@ import static org.apache.datasketches.common.Util.LS;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
+import java.nio.ByteOrder;
 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.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.quantilescommon.QuantilesDoublesSketchIterator;
 
@@ -61,8 +66,9 @@ 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();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = 
WritableMemory.allocateDirect(10_000_000,
+            new DefaultMemoryRequestServer())).scope()) {
       dUnion = DoublesUnion.builder().setMaxK(8).build(wmem);
       for (int s = 0; s < numSketches; s++) { dUnion.union(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..84145239 100644
--- 
a/src/test/java/org/apache/datasketches/quantiles/DirectQuantilesMemoryRequestTest.java
+++ 
b/src/test/java/org/apache/datasketches/quantiles/DirectQuantilesMemoryRequestTest.java
@@ -30,9 +30,11 @@ import 
org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.testng.annotations.Test;
 
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+//import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 
+import jdk.incubator.foreign.ResourceScope;
+
 /**
  * The concept for these tests is that the "MemoryManager" classes below are 
proxies for the
  * implementation that <i>owns</i> the native memory allocations, thus is 
responsible for
@@ -47,10 +49,11 @@ public class DirectQuantilesMemoryRequestTest {
     final int initBytes = ((2 * k) + 4) << 3; //just the BB
 
     //########## 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();
+    // This part would actually be part of the Memory owning implementation so 
it is faked here
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = 
WritableMemory.allocateDirect(initBytes, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
       println("Initial mem size: " + wmem.getCapacity());
 
       //########## Receiving Application
@@ -84,13 +87,12 @@ 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();
-      println("Initial mem size: " + mem1.getCapacity());
-      final UpdateDoublesSketch usk1 = 
DoublesSketch.builder().setK(k).build(mem1);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = 
WritableMemory.allocateDirect(initBytes, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
+      println("Initial mem size: " + wmem.getCapacity());
+      final UpdateDoublesSketch usk1 = 
DoublesSketch.builder().setK(k).build(wmem);
       for (int i = 1; i <= u; i++) {
         usk1.update(i);
       }
@@ -108,13 +110,12 @@ 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();
-      println("Initial mem size: " + mem1.getCapacity());
-      final UpdateDoublesSketch usk1 = 
DoublesSketch.builder().setK(k).build(mem1);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = 
WritableMemory.allocateDirect(initBytes, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
+      println("Initial mem size: " + wmem.getCapacity());
+      final UpdateDoublesSketch usk1 = 
DoublesSketch.builder().setK(k).build(wmem);
       for (int i = 1; i <= u; i++) {
         usk1.update(i);
       }
@@ -138,21 +139,22 @@ 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();
-      origSketchMem.copyTo(0, mem, 0, initBytes);
-      UpdateDoublesSketch usk2 = DirectUpdateDoublesSketch.wrapInstance(mem);
-      assertTrue(mem.isSameResource(usk2.getMemory()));
-      assertEquals(mem.getCapacity(), initBytes);
-      assertTrue(mem.isDirect());
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = 
WritableMemory.allocateDirect(initBytes, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
+      origSketchMem.copyTo(0, wmem, 0, initBytes);
+      UpdateDoublesSketch usk2 = DirectUpdateDoublesSketch.wrapInstance(wmem);
+      assertTrue(wmem.isSameResource(usk2.getMemory()));
+      assertEquals(wmem.getCapacity(), initBytes);
+      assertTrue(wmem.isDirect());
       assertTrue(usk2.isEmpty());
 
       //update the sketch forcing it to grow on-heap
       for (int i = 1; i <= 5; i++) { usk2.update(i); }
       assertEquals(usk2.getN(), 5);
       WritableMemory mem2 = usk2.getMemory();
-      assertFalse(mem.isSameResource(mem2));
+      assertFalse(wmem.isSameResource(mem2));
       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 5bc5b4ea..fbac2af1 100644
--- a/src/test/java/org/apache/datasketches/quantiles/DoublesSketchTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/DoublesSketchTest.java
@@ -28,13 +28,15 @@ import static org.testng.Assert.fail;
 import java.nio.ByteOrder;
 
 import org.apache.datasketches.memory.DefaultMemoryRequestServer;
-import org.apache.datasketches.memory.WritableHandle;
+//import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.quantilescommon.DoublesSortedView;
 import org.apache.datasketches.quantilescommon.DoublesSortedViewIterator;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 public class DoublesSketchTest {
 
   @Test
@@ -140,15 +142,17 @@ public class DoublesSketchTest {
 
   @Test
   public void directSketchShouldMoveOntoHeapEventually() {
-    try (WritableHandle wdh = WritableMemory.allocateDirect(1000,
-            ByteOrder.nativeOrder(), new DefaultMemoryRequestServer())) {
-      WritableMemory mem = wdh.getWritable();
-      UpdateDoublesSketch sketch = DoublesSketch.builder().build(mem);
-      Assert.assertTrue(sketch.isSameResource(mem));
+
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(1000, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
+      UpdateDoublesSketch sketch = DoublesSketch.builder().build(wmem);
+      Assert.assertTrue(sketch.isSameResource(wmem));
       for (int i = 0; i < 1000; i++) {
         sketch.update(i);
       }
-      Assert.assertFalse(sketch.isSameResource(mem));
+      Assert.assertFalse(sketch.isSameResource(wmem));
     } catch (final Exception e) {
       throw new RuntimeException(e);
     }
@@ -157,13 +161,14 @@ 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();
-      UpdateDoublesSketch sketch = DoublesSketch.builder().build(mem);
-      Assert.assertTrue(sketch.isSameResource(mem));
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(50, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
+      UpdateDoublesSketch sketch = DoublesSketch.builder().build(wmem);
+      Assert.assertTrue(sketch.isSameResource(wmem));
       for (; i < 1000; i++) {
-        if (sketch.isSameResource(mem)) {
+        if (sketch.isSameResource(wmem)) {
           sketch.update(i);
         } else {
           //println("MOVED OUT at i = " + i);
@@ -177,9 +182,11 @@ public class DoublesSketchTest {
 
   @Test
   public void checkEmptyDirect() {
-    try (WritableHandle wdh = WritableMemory.allocateDirect(1000)) {
-      WritableMemory mem = wdh.getWritable();
-      UpdateDoublesSketch sketch = DoublesSketch.builder().build(mem);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(1000, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
+      UpdateDoublesSketch sketch = DoublesSketch.builder().build(wmem);
       sketch.toByteArray(); //exercises a specific path
     } catch (final Exception e) {
       throw new RuntimeException(e);
diff --git 
a/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java 
b/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java
index be2f328b..adf916ef 100644
--- a/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java
+++ b/src/test/java/org/apache/datasketches/quantiles/PreambleUtilTest.java
@@ -37,19 +37,24 @@ import static 
org.apache.datasketches.quantiles.PreambleUtil.insertPreLongs;
 import static org.apache.datasketches.quantiles.PreambleUtil.insertSerVer;
 import static org.testng.Assert.assertEquals;
 
-import org.testng.annotations.Test;
+import java.nio.ByteOrder;
 
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
+import org.testng.annotations.Test;
+
+import jdk.incubator.foreign.ResourceScope;
 
 public class PreambleUtilTest {
 
   @Test
   public void checkInsertsAndExtracts() {
     final int bytes = 32;
-    try (WritableHandle offHeapMemHandler = 
WritableMemory.allocateDirect(bytes)) {
-      final WritableMemory offHeapMem = offHeapMemHandler.getWritable();
+    WritableMemory offHeapMem;
+    try (ResourceScope scope = (offHeapMem = 
WritableMemory.allocateDirect(bytes, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
+
       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 42b6069d..1ad55696 100644
--- a/src/test/java/org/apache/datasketches/theta/CompactSketchTest.java
+++ b/src/test/java/org/apache/datasketches/theta/CompactSketchTest.java
@@ -26,13 +26,18 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
+import java.nio.ByteOrder;
+
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.SketchesArgumentException;
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+//import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 /**
  * @author Lee Rhodes
  */
@@ -78,8 +83,9 @@ public class CompactSketchTest {
     //Prepare Memory for direct
     int bytes = usk.getCompactBytes(); //for Compact
 
-    try (WritableHandle wdh = WritableMemory.allocateDirect(bytes)) {
-      WritableMemory directMem = wdh.getWritable();
+    WritableMemory directMem;
+    try (ResourceScope scope = (directMem = 
WritableMemory.allocateDirect(bytes,
+        new DefaultMemoryRequestServer())).scope()) {
 
       /**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 5191c7c6..1f1bfa9e 100644
--- 
a/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java
+++ 
b/src/test/java/org/apache/datasketches/theta/DirectQuickSelectSketchTest.java
@@ -38,19 +38,23 @@ import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
+import java.nio.ByteOrder;
 import java.util.Arrays;
 
 import org.apache.datasketches.common.Family;
 import org.apache.datasketches.common.ResizeFactor;
 import org.apache.datasketches.common.SketchesArgumentException;
 import org.apache.datasketches.common.SketchesReadOnlyException;
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+//import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.thetacommon.HashOperations;
 import org.apache.datasketches.thetacommon.ThetaUtil;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 /**
  * @author Lee Rhodes
  */
@@ -59,10 +63,10 @@ public class DirectQuickSelectSketchTest {
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkBadSerVer() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
 
       assertTrue(usk.isEmpty());
@@ -73,9 +77,9 @@ public class DirectQuickSelectSketchTest {
       assertEquals(usk.getEstimate(), k, 0.0);
       assertEquals(sk1.getRetainedEntries(false), k);
 
-      mem.putByte(SER_VER_BYTE, (byte) 0); //corrupt the SerVer byte
+      wmem.putByte(SER_VER_BYTE, (byte) 0); //corrupt the SerVer byte
 
-      Sketch.wrap(mem);
+      Sketch.wrap(wmem);
     } catch (final Exception e) {
       if (e instanceof SketchesArgumentException) {}
       else { throw new RuntimeException(e); }
@@ -85,9 +89,9 @@ public class DirectQuickSelectSketchTest {
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkConstructorKtooSmall() {
     int k = 8;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
-      UpdateSketch.builder().setNominalEntries(k).build(mem);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
+      UpdateSketch.builder().setNominalEntries(k).build(wmem);
     } catch (final Exception e) {
       if (e instanceof SketchesArgumentException) {}
       else { throw new RuntimeException(e); }
@@ -97,9 +101,9 @@ public class DirectQuickSelectSketchTest {
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkConstructorMemTooSmall() {
     int k = 16;
-    try (WritableHandle h = makeNativeMemory(k/2)) {
-      WritableMemory mem = h.getWritable();
-      UpdateSketch.builder().setNominalEntries(k).build(mem);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k/2)).scope()) {
+      UpdateSketch.builder().setNominalEntries(k).build(wmem);
     } catch (final Exception e) {
       if (e instanceof SketchesArgumentException) {}
       else { throw new RuntimeException(e); }
@@ -124,10 +128,10 @@ public class DirectQuickSelectSketchTest {
     int k = 512;
     int u = 2*k; //thus estimating
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch sk1 = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch sk1 = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       for (int i=0; i<u; i++) { sk1.update(i); }
 
       double sk1est = sk1.getEstimate();
@@ -142,7 +146,7 @@ public class DirectQuickSelectSketchTest {
       assertTrue(sk1.hasMemory());
       assertEquals(sk1.getCurrentPreambleLongs(), 3);
 
-      UpdateSketch sk2 = Sketches.heapifyUpdateSketch(mem);
+      UpdateSketch sk2 = Sketches.heapifyUpdateSketch(wmem);
       assertEquals(sk2.getEstimate(), sk1est);
       assertEquals(sk2.getLowerBound(2), sk1lb);
       assertEquals(sk2.getUpperBound(2), sk1ub);
@@ -196,10 +200,10 @@ public class DirectQuickSelectSketchTest {
     int k = 512;
     long seed1 = 1021;
     long seed2 = ThetaUtil.DEFAULT_UPDATE_SEED;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setSeed(seed1).setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setSeed(seed1).setNominalEntries(k).build(wmem);
       byte[] byteArray = usk.toByteArray();
       Memory srcMem = Memory.wrap(byteArray);
       Sketch.heapify(srcMem, seed2);
@@ -212,11 +216,11 @@ public class DirectQuickSelectSketchTest {
   @Test//(expectedExceptions = SketchesArgumentException.class)
   public void checkCorruptLgNomLongs() {
     int k = 16;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
-      UpdateSketch.builder().setNominalEntries(k).build(mem);
-      mem.putByte(LG_NOM_LONGS_BYTE, (byte)2); //corrupt
-      Sketch.heapify(mem, ThetaUtil.DEFAULT_UPDATE_SEED);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
+      UpdateSketch.builder().setNominalEntries(k).build(wmem);
+      wmem.putByte(LG_NOM_LONGS_BYTE, (byte)2); //corrupt
+      Sketch.heapify(wmem, ThetaUtil.DEFAULT_UPDATE_SEED);
     } catch (final Exception e) {
       if (e instanceof SketchesArgumentException) {}
       else { throw new RuntimeException(e); }
@@ -226,10 +230,10 @@ public class DirectQuickSelectSketchTest {
   @Test
   public void checkHeapifyByteArrayExact() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
 
       for (int i=0; i< k; i++) { usk.update(i); }
 
@@ -259,9 +263,9 @@ public class DirectQuickSelectSketchTest {
   public void checkHeapifyByteArrayEstimating() {
     int k = 4096;
     int u = 2*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
 
       for (int i=0; i<u; i++) { usk.update(i); }
 
@@ -289,9 +293,9 @@ public class DirectQuickSelectSketchTest {
     int k = 512;
     int u = 2*k; //thus estimating
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
-      UpdateSketch sk1 = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
+      UpdateSketch sk1 = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       for (int i=0; i<u; i++) { sk1.update(i); }
 
       double sk1est = sk1.getEstimate();
@@ -299,7 +303,7 @@ public class DirectQuickSelectSketchTest {
       double sk1ub  = sk1.getUpperBound(2);
       assertTrue(sk1.isEstimationMode());
 
-      Sketch sk2 = Sketch.wrap(mem);
+      Sketch sk2 = Sketch.wrap(wmem);
 
       assertEquals(sk2.getEstimate(), sk1est);
       assertEquals(sk2.getLowerBound(2), sk1lb);
@@ -315,10 +319,10 @@ public class DirectQuickSelectSketchTest {
   public void checkDQStoCompactForms() {
     int k = 512;
     int u = 4*k; //thus estimating
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
 
       assertEquals(usk.getClass().getSimpleName(), "DirectQuickSelectSketch");
@@ -385,10 +389,10 @@ public class DirectQuickSelectSketchTest {
   @Test
   public void checkDQStoCompactEmptyForms() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
 
       //empty
       usk.toString(false, true, 0, false); //exercise toString
@@ -431,10 +435,10 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     int u = 2*k;
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
 
       assertTrue(usk.isEmpty());
@@ -452,10 +456,10 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     float p = (float)0.5;
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setP(p).setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setP(p).setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
 
       for (int i = 0; i < k; i++ ) { usk.update(i); }
@@ -478,10 +482,10 @@ public class DirectQuickSelectSketchTest {
   @Test
   public void checkErrorBounds() {
     int k = 512;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
 
       //Exact mode
       for (int i = 0; i < k; i++ ) { usk.update(i); }
@@ -514,10 +518,10 @@ public class DirectQuickSelectSketchTest {
     //virgin, p = 1.0
     int k = 1024;
     float p = (float)1.0;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setP(p).setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setP(p).setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
 
       assertTrue(usk.isEmpty());
@@ -527,7 +531,7 @@ public class DirectQuickSelectSketchTest {
 
       //virgin, p = .001
       p = (float)0.001;
-      byte[] memArr2 = new byte[(int) mem.getCapacity()];
+      byte[] memArr2 = new byte[(int) wmem.getCapacity()];
       WritableMemory mem2 = WritableMemory.writableWrap(memArr2);
       UpdateSketch usk2 = 
UpdateSketch.builder().setP(p).setNominalEntries(k).build(mem2);
       sk1 = (DirectQuickSelectSketch)usk2;
@@ -554,10 +558,10 @@ public class DirectQuickSelectSketchTest {
   public void checkUpperAndLowerBounds() {
     int k = 512;
     int u = 2*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
 
       for (int i = 0; i < u; i++ ) { usk.update(i); }
 
@@ -575,10 +579,10 @@ public class DirectQuickSelectSketchTest {
   public void checkRebuild() {
     int k = 512;
     int u = 4*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
 
       assertTrue(usk.isEmpty());
@@ -604,10 +608,10 @@ public class DirectQuickSelectSketchTest {
   public void checkResetAndStartingSubMultiple() {
     int k = 512;
     int u = 4*k;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
 
       assertTrue(usk.isEmpty());
@@ -635,10 +639,10 @@ public class DirectQuickSelectSketchTest {
   public void checkExactModeMemoryArr() {
     int k = 4096;
     int u = 4096;
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
       assertTrue(usk.isEmpty());
 
@@ -656,10 +660,10 @@ public class DirectQuickSelectSketchTest {
     int k = 4096;
     int u = 2*k;
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      WritableMemory mem = h.getWritable();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(mem);
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
       assertTrue(usk.isEmpty());
 
@@ -678,9 +682,11 @@ public class DirectQuickSelectSketchTest {
     int u = 2*k;
     int memCapacity = (k << 4) + (Family.QUICKSELECT.getMinPreLongs() << 3);
 
-    try(WritableHandle memHandler = 
WritableMemory.allocateDirect(memCapacity)) {
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = 
WritableMemory.allocateDirect(memCapacity,
+            new DefaultMemoryRequestServer())).scope()) {
 
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(memHandler.getWritable());
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       DirectQuickSelectSketch sk1 = (DirectQuickSelectSketch)usk; //for 
internal checks
       assertTrue(usk.isEmpty());
 
@@ -698,9 +704,10 @@ public class DirectQuickSelectSketchTest {
   public void checkConstructReconstructFromMemory() {
     int k = 4096;
     int u = 2*k;
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = makeNativeMemory(k)).scope()) {
 
-    try (WritableHandle h = makeNativeMemory(k)) {
-      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(h.getWritable());
+      UpdateSketch usk = 
UpdateSketch.builder().setNominalEntries(k).build(wmem);
       assertTrue(usk.isEmpty());
 
       for (int i = 0; i< u; i++) { usk.update(i); } //force estimation
@@ -868,8 +875,10 @@ 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();
+
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(bytes / 
2, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
       UpdateSketch sketch = 
Sketches.updateSketchBuilder().setNominalEntries(k).build(wmem);
       assertTrue(sketch.isSameResource(wmem));
       for (int i = 0; i < u; i++) { sketch.update(i); }
@@ -884,8 +893,9 @@ 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();
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(bytes / 
2, 1,
+            ByteOrder.nativeOrder(), new 
DefaultMemoryRequestServer())).scope()) {
       UpdateSketch sketch = 
Sketches.updateSketchBuilder().setNominalEntries(k).build(wmem);
       for (int i = 0; i < u; i++) { sketch.update(i); }
       double est1 = sketch.getEstimate();
@@ -929,8 +939,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) {
+    return WritableMemory.allocateDirect(getMaxBytes(k), new 
DefaultMemoryRequestServer());
   }
 
 }
diff --git 
a/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java 
b/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java
index bd7652bd..d3617c67 100644
--- 
a/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java
+++ 
b/src/test/java/org/apache/datasketches/theta/HeapifyWrapSerVer1and2Test.java
@@ -23,13 +23,15 @@ 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.WritableMemory;
 import org.apache.datasketches.thetacommon.ThetaUtil;
 import org.apache.datasketches.tuple.Util;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 @SuppressWarnings("resource")
 public class HeapifyWrapSerVer1and2Test {
   private static final short defaultSeedHash = 
Util.computeSeedHash(ThetaUtil.DEFAULT_UPDATE_SEED);
@@ -282,32 +284,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
@@ -318,32 +320,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
@@ -354,32 +356,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
@@ -390,32 +392,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
@@ -426,32 +428,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
@@ -462,32 +464,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
@@ -498,32 +500,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
@@ -534,40 +536,39 @@ 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();
+    WritableMemory wmem = WritableMemory.allocateDirect(cap, new 
DefaultMemoryRequestServer());
     heapMem.copyTo(0, wmem, 0, cap);
-    return wh;
+    return wmem;
   }
 
   @Test
diff --git a/src/test/java/org/apache/datasketches/theta/SketchesTest.java 
b/src/test/java/org/apache/datasketches/theta/SketchesTest.java
index 84942fe2..3adf3211 100644
--- a/src/test/java/org/apache/datasketches/theta/SketchesTest.java
+++ b/src/test/java/org/apache/datasketches/theta/SketchesTest.java
@@ -145,7 +145,7 @@ public class SketchesTest {
     assertEquals(24+(k+1)*8, maxCompSkBytes);
 
     final int compSkMaxBytes = getCompactSketchMaxBytes(lgK); {
-      assertEquals(compSkMaxBytes, ((2 << lgK) * 15) / 16 + 
(Family.QUICKSELECT.getMaxPreLongs() << 3));
+      assertEquals(compSkMaxBytes, (((2 << lgK) * 15) / 16 + 
Family.QUICKSELECT.getMaxPreLongs()) << 3);
     }
 
     final int maxSkBytes = getMaxUpdateSketchBytes(k);
diff --git a/src/test/java/org/apache/datasketches/theta/UnionImplTest.java 
b/src/test/java/org/apache/datasketches/theta/UnionImplTest.java
index 4a3de896..ee0fed44 100644
--- a/src/test/java/org/apache/datasketches/theta/UnionImplTest.java
+++ b/src/test/java/org/apache/datasketches/theta/UnionImplTest.java
@@ -25,13 +25,18 @@ import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
+import java.nio.ByteOrder;
+
 import org.apache.datasketches.common.SketchesArgumentException;
+import org.apache.datasketches.memory.DefaultMemoryRequestServer;
 import org.apache.datasketches.memory.Memory;
-import org.apache.datasketches.memory.WritableHandle;
+//import org.apache.datasketches.memory.WritableHandle;
 import org.apache.datasketches.memory.WritableMemory;
 import org.apache.datasketches.thetacommon.ThetaUtil;
 import org.testng.annotations.Test;
 
+import jdk.incubator.foreign.ResourceScope;
+
 public class UnionImplTest {
 
   @Test
@@ -192,13 +197,13 @@ 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()) {
+
+      final WritableMemory wmem = WritableMemory.allocateDirect(bytes / 2, 1, 
scope, ByteOrder.nativeOrder(), new DefaultMemoryRequestServer());
       final UpdateSketch sketch = 
Sketches.updateSketchBuilder().setNominalEntries(k).build(wmem);
       assertTrue(sketch.isSameResource(wmem));
 
-      final WritableMemory wmem2 = wh2.getWritable();
+      final WritableMemory wmem2 = WritableMemory.allocateDirect(bytes / 2, 1, 
scope, ByteOrder.nativeOrder(), new DefaultMemoryRequestServer());
       final Union union = SetOperation.builder().buildUnion(wmem2);
       assertTrue(union.isSameResource(wmem2));
 
@@ -224,14 +229,17 @@ public class UnionImplTest {
 
   @Test
   public void checkUnionCompactOrderedSource() {
-    final int k = 1 << 12;
+    final int lgK = 12;
+    final int k = 1 << lgK;
     final UpdateSketch sk = Sketches.updateSketchBuilder().build();
     for (int i = 0; i < k; i++) { sk.update(i); }
     final double est1 = sk.getEstimate();
 
-    final int bytes = 
Sketches.getMaxCompactSketchBytes(sk.getRetainedEntries(true));
-    try (WritableHandle h = WritableMemory.allocateDirect(bytes)) {
-      final WritableMemory wmem = h.getWritable();
+    final int bytes = Sketches.getCompactSketchMaxBytes(lgK);
+    WritableMemory wmem;
+    try (ResourceScope scope = (wmem = WritableMemory.allocateDirect(bytes,
+            new DefaultMemoryRequestServer())).scope()) {
+
       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 76f4707a..90177027 100644
--- a/src/test/java/org/apache/datasketches/theta/UpdateSketchTest.java
+++ b/src/test/java/org/apache/datasketches/theta/UpdateSketchTest.java
@@ -222,8 +222,8 @@ 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));
+    assertTrue(cskwmem1.equalTo(cskwmem2));
+    assertTrue(cskwmem1.equalTo(cskwmem3));
   }
 
   @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to