< prev index next >
test/jdk/java/lang/ref/ReferenceEnqueue.java
Print this page
*** 23,33 ****
/* @test
* @bug 4268317 8132306 8175797
* @summary Test if Reference.enqueue() works properly with GC
* @run main ReferenceEnqueue
- * @run main/othervm -Djdk.lang.ref.disableClearBeforeEnqueue=true ReferenceEnqueue
*/
import java.lang.ref.*;
import java.util.ArrayList;
import java.util.List;
--- 23,32 ----
*** 85,96 ****
static class ExplicitEnqueue {
final ReferenceQueue<Object> queue = new ReferenceQueue<>();
final List<Reference<Object>> refs = new ArrayList<>();
final int iterations = 1000;
- final boolean disableClearBeforeEnqueue =
- Boolean.getBoolean("jdk.lang.ref.disableClearBeforeEnqueue");
ExplicitEnqueue() {
this.refs.add(new SoftReference<>(new Object(), queue));
this.refs.add(new WeakReference<>(new Object(), queue));
// Can't test PhantomReference because get() always returns null.
--- 84,93 ----
*** 99,112 ****
void run() throws InterruptedException {
for (Reference<Object> ref : refs) {
if (ref.enqueue() == false) {
throw new RuntimeException("Error: enqueue failed");
}
! if (disableClearBeforeEnqueue && ref.get() == null) {
! throw new RuntimeException("Error: clearing should be disabled");
! }
! if (!disableClearBeforeEnqueue && ref.get() != null) {
throw new RuntimeException("Error: referent must be cleared");
}
}
System.gc();
--- 96,106 ----
void run() throws InterruptedException {
for (Reference<Object> ref : refs) {
if (ref.enqueue() == false) {
throw new RuntimeException("Error: enqueue failed");
}
! if (ref.get() != null) {
throw new RuntimeException("Error: referent must be cleared");
}
}
System.gc();
< prev index next >