|
@@ -51,7 +51,6 @@ import java.nio.IntBuffer;
|
|
import java.nio.LongBuffer;
|
|
import java.nio.LongBuffer;
|
|
import java.nio.ShortBuffer;
|
|
import java.nio.ShortBuffer;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
-import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Level;
|
|
import java.util.logging.Logger;
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
@@ -1268,7 +1267,6 @@ public final class BufferUtils {
|
|
System.out.println(store.toString());
|
|
System.out.println(store.toString());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- private static final AtomicBoolean loadedMethods = new AtomicBoolean(false);
|
|
|
|
private static Method cleanerMethod = null;
|
|
private static Method cleanerMethod = null;
|
|
private static Method cleanMethod = null;
|
|
private static Method cleanMethod = null;
|
|
private static Method viewedBufferMethod = null;
|
|
private static Method viewedBufferMethod = null;
|
|
@@ -1288,31 +1286,23 @@ public final class BufferUtils {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private static void loadCleanerMethods() {
|
|
|
|
- // If its already true, exit, if not, set it to true.
|
|
|
|
- if (BufferUtils.loadedMethods.getAndSet(true)) {
|
|
|
|
- return;
|
|
|
|
|
|
+ static {
|
|
|
|
+ // Oracle JRE / OpenJDK
|
|
|
|
+ cleanerMethod = loadMethod("sun.nio.ch.DirectBuffer", "cleaner");
|
|
|
|
+ cleanMethod = loadMethod("sun.misc.Cleaner", "clean");
|
|
|
|
+ viewedBufferMethod = loadMethod("sun.nio.ch.DirectBuffer", "viewedBuffer");
|
|
|
|
+ if (viewedBufferMethod == null) {
|
|
|
|
+ // They changed the name in Java 7 (???)
|
|
|
|
+ viewedBufferMethod = loadMethod("sun.nio.ch.DirectBuffer", "attachment");
|
|
}
|
|
}
|
|
- // This could potentially be called many times if used from multiple
|
|
|
|
- // threads
|
|
|
|
- synchronized (BufferUtils.loadedMethods) {
|
|
|
|
- // Oracle JRE / OpenJDK
|
|
|
|
- cleanerMethod = loadMethod("sun.nio.ch.DirectBuffer", "cleaner");
|
|
|
|
- cleanMethod = loadMethod("sun.misc.Cleaner", "clean");
|
|
|
|
- viewedBufferMethod = loadMethod("sun.nio.ch.DirectBuffer", "viewedBuffer");
|
|
|
|
- if (viewedBufferMethod == null) {
|
|
|
|
- // They changed the name in Java 7 (???)
|
|
|
|
- viewedBufferMethod = loadMethod("sun.nio.ch.DirectBuffer", "attachment");
|
|
|
|
- }
|
|
|
|
|
|
|
|
- // Apache Harmony
|
|
|
|
- ByteBuffer bb = BufferUtils.createByteBuffer(1);
|
|
|
|
- Class<?> clazz = bb.getClass();
|
|
|
|
- try {
|
|
|
|
- freeMethod = clazz.getMethod("free");
|
|
|
|
- } catch (NoSuchMethodException ex) {
|
|
|
|
- } catch (SecurityException ex) {
|
|
|
|
- }
|
|
|
|
|
|
+ // Apache Harmony
|
|
|
|
+ ByteBuffer bb = BufferUtils.createByteBuffer(1);
|
|
|
|
+ Class<?> clazz = bb.getClass();
|
|
|
|
+ try {
|
|
|
|
+ freeMethod = clazz.getMethod("free");
|
|
|
|
+ } catch (NoSuchMethodException ex) {
|
|
|
|
+ } catch (SecurityException ex) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1333,8 +1323,6 @@ public final class BufferUtils {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- BufferUtils.loadCleanerMethods();
|
|
|
|
-
|
|
|
|
try {
|
|
try {
|
|
if (freeMethod != null) {
|
|
if (freeMethod != null) {
|
|
freeMethod.invoke(toBeDestroyed);
|
|
freeMethod.invoke(toBeDestroyed);
|