--- old/src/java.base/share/classes/java/nio/Bits.java 2016-02-07 17:26:31.980993720 +0100 +++ new/src/java.base/share/classes/java/nio/Bits.java 2016-02-07 17:26:31.865995662 +0100 @@ -32,6 +32,8 @@ 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. @@ -629,7 +631,8 @@ // 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; } @@ -651,7 +654,8 @@ 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;