< prev index next >
src/java.base/share/classes/java/nio/Bits.java
Print this page
@@ -30,10 +30,12 @@
import jdk.internal.misc.JavaNioAccess;
import jdk.internal.misc.JavaLangRefAccess;
import jdk.internal.misc.SharedSecrets;
import jdk.internal.misc.Unsafe;
import jdk.internal.misc.VM;
+import jdk.internal.ref.CleanerFactory;
+import jdk.internal.ref.CleanerImpl;
/**
* Access to bits, native and otherwise.
*/
@@ -627,11 +629,12 @@
final JavaLangRefAccess jlra = SharedSecrets.getJavaLangRefAccess();
// retry while helping enqueue pending Reference objects
// which includes executing pending Cleaner(s) which includes
// Cleaner(s) that free direct buffer memory
- while (jlra.tryHandlePendingReference()) {
+ while (jlra.tryHandlePendingReference() | // use non-short-circuit or
+ CleanerImpl.getCleanerImpl(CleanerFactory.cleaner()).drainQueue()) {
if (tryReserveMemory(size, cap)) {
return;
}
}
@@ -649,11 +652,12 @@
return;
}
if (sleeps >= MAX_SLEEPS) {
break;
}
- if (!jlra.tryHandlePendingReference()) {
+ if (!jlra.tryHandlePendingReference() & // use non-short-circuit and
+ !CleanerImpl.getCleanerImpl(CleanerFactory.cleaner()).drainQueue()) {
try {
Thread.sleep(sleepTime);
sleepTime <<= 1;
sleeps++;
} catch (InterruptedException e) {
< prev index next >