< prev index next >

src/java.base/share/classes/jdk/internal/misc/Unsafe.java

Print this page

        

*** 24,34 **** --- 24,36 ---- */ 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.security.ProtectionDomain;
*** 3716,3725 **** --- 3718,3750 ---- private native int getLoadAverage0(double[] loadavg, int nelems); private native boolean unalignedAccess0(); private native boolean isBigEndian0(); + /** + * Invokes the given direct byte buffer's cleaner, if any. + * + * @param directBuffer a direct byte buffer + * @throws NullPointerException if {@code directBuffer} is null + * @throws IllegalArgumentException if {@code directBuffer} is non-direct, + * or is a {@link java.nio.Buffer#slice slice}, or is a + * {@link java.nio.Buffer#duplicate duplicate} + */ + public void invokeCleaner(java.nio.ByteBuffer directBuffer) { + if (!directBuffer.isDirect()) + throw new IllegalArgumentException("buffer is non-direct"); + + DirectBuffer db = (DirectBuffer) directBuffer; + if (db.attachment() != null) + throw new IllegalArgumentException("duplicate or slice"); + + Cleaner cleaner = db.cleaner(); + if (cleaner != null) { + cleaner.clean(); + } + } + // The following deprecated methods are used by JSR 166. @Deprecated(since="12", forRemoval=true) public final Object getObject(Object o, long offset) { return getReference(o, offset);
< prev index next >