< prev index next >
src/java.base/share/classes/java/nio/Bits.java
Print this page
*** 30,39 ****
--- 30,41 ----
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.
*/
*** 624,637 ****
return;
}
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()) {
if (tryReserveMemory(size, cap)) {
return;
}
}
--- 626,641 ----
return;
}
final JavaLangRefAccess jlra = SharedSecrets.getJavaLangRefAccess();
! // retry while:
! // - helping enqueue pending Reference objects which includes Cleanable(s)
! // - helping processing the queue of Cleanable(s) which includes the ones
! // that free direct buffer memory
! while (jlra.tryHandlePendingReference() | // use non-short-circuit or
! CleanerImpl.getCleanerImpl(CleanerFactory.cleaner()).drainQueue()) {
if (tryReserveMemory(size, cap)) {
return;
}
}
*** 649,659 ****
return;
}
if (sleeps >= MAX_SLEEPS) {
break;
}
! if (!jlra.tryHandlePendingReference()) {
try {
Thread.sleep(sleepTime);
sleepTime <<= 1;
sleeps++;
} catch (InterruptedException e) {
--- 653,664 ----
return;
}
if (sleeps >= MAX_SLEEPS) {
break;
}
! 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 >