8286737: Test vmTestbase/gc/gctests/WeakReference/weak006/weak006.java fails: Last soft reference has not been cleared

Reviewed-by: ayang
This commit is contained in:
Leonid Mesnik 2022-05-26 22:36:43 +00:00
parent 295be6f10f
commit 6a33974a6b
2 changed files with 21 additions and 34 deletions

View File

@ -154,7 +154,6 @@ vmTestbase/nsk/jvmti/scenarios/jni_interception/JI06/ji06t001/TestDescription.ja
vmTestbase/nsk/jvmti/SetJNIFunctionTable/setjniftab001/TestDescription.java 8219652 aix-ppc64
vmTestbase/nsk/jvmti/AttachOnDemand/attach002a/TestDescription.java 8277812 generic-all
vmTestbase/gc/gctests/WeakReference/weak006/weak006.java 8286737 generic-all
vmTestbase/gc/lock/jni/jnilock002/TestDescription.java 8192647 generic-all
vmTestbase/jit/escape/LockCoarsening/LockCoarsening001.java 8148743 generic-all

View File

@ -32,7 +32,7 @@
* /test/lib
* @build jdk.test.whitebox.WhiteBox
* @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI gc.gctests.WeakReference.weak006.weak006 -t 1
* @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+IgnoreUnrecognizedVMOptions -XX:-ScavengeBeforeFullGC gc.gctests.WeakReference.weak006.weak006 -t 1
*/
package gc.gctests.WeakReference.weak006;
@ -54,6 +54,20 @@ import java.lang.ref.Reference;
* to the next, then provokes GC with WB.fullGC().
* The test succedes if last reference has been cleared.
*/
class MySoftReference<T> extends SoftReference<T> {
public MySoftReference(T obj) {
super(obj);
}
}
class MyWeakReference<T> extends WeakReference<T> {
public MyWeakReference(T obj) {
super(obj);
}
}
public class weak006 extends ThreadedGCTest {
class Worker implements Runnable {
@ -63,40 +77,14 @@ public class weak006 extends ThreadedGCTest {
private Object[] references;
private Reference lastReference;
private Object makeReference(int n, Object o) {
private Reference<Object> makeReference(int n, Object o) {
switch (n) {
case 0:
return new WeakReference(o);
return new MyWeakReference(o);
case 1:
return new SoftReference(o);
case 2:
return new PhantomReference(o, null);
case 4: {
// Array of strong references
int len = Memory.getArrayLength(objectSize, Memory.getReferenceSize());
Object[] arr = new Object[len];
for (int i = 0; i < len; ++i) {
arr[i] = o;
}
return arr;
}
case 5: {
// reference to array of strong references and strong reference to reference
int len = Memory.getArrayLength(objectSize, Memory.getReferenceSize());
Object[] arr = new Object[len];
for (int i = 1; i < len; ++i) {
arr[i] = o;
}
Reference ref = (Reference) makeReference(LocalRandom.nextInt(3), arr);
if (len > 0) {
arr[0] = ref;
}
return ref;
}
case 3:
return new MySoftReference(o);
default:
// Strong reference
return o;
throw new RuntimeException("Incorrect reference type");
}
}
@ -108,12 +96,12 @@ public class weak006 extends ThreadedGCTest {
private void makeReferences(int n) {
clear();
MemoryObject obj = new MemoryObject(objectSize);
references[0] = new WeakReference(obj);
references[0] = new MyWeakReference(obj);
for (int i = 1; i < length; ++i) {
if (i != length - 1) {
references[i] = makeReference(LocalRandom.nextInt(2), references[i - 1]);
} else {
lastReference = (Reference) makeReference(n, references[i - 1]);
lastReference = makeReference(n, references[i - 1]);
references[i] = lastReference;
}
}