< prev index next >
src/java.base/share/classes/jdk/internal/misc/Unsafe.java
Print this page
@@ -24,13 +24,16 @@
*/
package jdk.internal.misc;
import jdk.internal.HotSpotIntrinsicCandidate;
+import jdk.internal.ref.Cleaner;
import jdk.internal.vm.annotation.ForceInline;
+import sun.nio.ch.DirectBuffer;
import java.lang.reflect.Field;
+import java.nio.ByteBuffer;
import java.security.ProtectionDomain;
/**
* A collection of methods for performing low-level, unsafe operations.
@@ -3249,10 +3252,29 @@
} while (!weakCompareAndSwapLongAcquire(o, offset,
current, current ^ mask));
return current;
}
+ /**
+ * Deallocates the underlying memory, if any, associated with the given
+ * direct byte buffer.
+ *
+ * @param directBuffer a direct byte buffer
+ * @throws NullPointerException if {@code directBuffer} is null
+ * @throws IllegalArgumentException if {@code directBuffer} is non-direct
+ * @since 9
+ */
+ public void deallocate(ByteBuffer directBuffer) {
+ if (!directBuffer.isDirect())
+ throw new IllegalArgumentException("buffer is non-direct");
+
+ Cleaner cleaner = ((DirectBuffer)directBuffer).cleaner();
+ if (cleaner != null) {
+ cleaner.clean();
+ }
+ }
+
/**
* Ensures that loads before the fence will not be reordered with loads and
* stores after the fence; a "LoadLoad plus LoadStore barrier".
< prev index next >