34 * - soft
35 * - weak
36 * - phantom
37 * - jni local
38 * - jni global
39 * - jni weak
40 * Test is executed for following sublcasses of ObjectReference: StringReference, ThreadReference, ClassLoaderReference, ArrayReference.
41 * The test scenario is following:
42 * - Debugger VM
43 * for refererence_type in <Strong, JNI_Local_Ref, JNI_Global_Ref, JNI_Weak_Ref, PhantomReference, SoftReference, WeakReference>
44 * do
45 * - initiate creation of referring objects of type 'refererence_type'
46 * - check the number of referrers and instances is correct
47 * - initiate deletion of some referreres(making them unreachable)
48 * - check the number of referrers and instances is correct
49 * done
50 * - Debugger VM
51 * create references of all possible types to single object, ObjectReference.referringObjects should return only
52 * referrers with supported type(Strong, PhantomReference, SoftReference, WeakReference)
53 *
54 * @library /vmTestbase
55 * /test/lib
56 * @run driver jdk.test.lib.FileInstaller . .
57 * @build nsk.jdi.ObjectReference.referringObjects.referringObjects001.referringObjects001
58 * nsk.share.jdi.TestClass1
59 * @run main/othervm/native PropertyResolvingWrapper
60 * nsk.jdi.ObjectReference.referringObjects.referringObjects001.referringObjects001
61 * -verbose
62 * -arch=${os.family}-${os.simpleArch}
63 * -waittime=5
64 * -debugee.vmkind=java
65 * -transport.address=dynamic
66 * "-debugee.vmkeys=-Xmx128M ${test.vm.opts} ${test.java.opts}"
67 */
68
69 package nsk.jdi.ObjectReference.referringObjects.referringObjects001;
70
71 import java.io.PrintStream;
72 import java.util.*;
73
133 // before debugger command (for example primitive type arrays), so we should filter such objects
134 List<ObjectReference> objectsToFilter = HeapwalkingDebugger.getObjectReferences(className, vm);
135
136 boolean includedInReferrersCount = HeapwalkingDebuggee.isIncludedIntoReferrersCount(referrerType);
137 boolean includedInInstancesCount = HeapwalkingDebuggee.isIncludedIntoInstancesCount(referrerType);
138
139 int createInstanceCount = 4;
140 int referrerCount = 10;
141
142 // create 'createInstanceCount' instances with 'referrerCount' referrers
143
144 pipe.println(HeapwalkingDebuggee.COMMAND_CREATE_INSTANCES + ":" + className + ":" + createInstanceCount + ":" + referrerCount + ":"
145 + referrerType);
146
147 int expectedInstanceCount;
148
149 if (includedInInstancesCount)
150 expectedInstanceCount = createInstanceCount;
151 else
152 expectedInstanceCount = 0;
153
154 checkDebugeeAnswer_instanceCounts(className, expectedInstanceCount, objectsToFilter);
155 checkDebugeeAnswer_instances_referringObjects(objectsToFilter, className, expectedInstanceCount, includedInReferrersCount, referrerCount);
156
157 // delete half of referrers
158
159 int deleteCount = referrerCount / 2;
160
161 pipe.println(HeapwalkingDebuggee.COMMAND_DELETE_REFERRERS + ":" + className + ":" + deleteCount);
162
163 referrerCount -= deleteCount;
164
165 if (includedInInstancesCount)
166 expectedInstanceCount = createInstanceCount;
167 else
168 expectedInstanceCount = 0;
169
170 checkDebugeeAnswer_instanceCounts(className, expectedInstanceCount, objectsToFilter);
171 checkDebugeeAnswer_instances_referringObjects(objectsToFilter, className, expectedInstanceCount, includedInReferrersCount, referrerCount);
172
|
34 * - soft
35 * - weak
36 * - phantom
37 * - jni local
38 * - jni global
39 * - jni weak
40 * Test is executed for following sublcasses of ObjectReference: StringReference, ThreadReference, ClassLoaderReference, ArrayReference.
41 * The test scenario is following:
42 * - Debugger VM
43 * for refererence_type in <Strong, JNI_Local_Ref, JNI_Global_Ref, JNI_Weak_Ref, PhantomReference, SoftReference, WeakReference>
44 * do
45 * - initiate creation of referring objects of type 'refererence_type'
46 * - check the number of referrers and instances is correct
47 * - initiate deletion of some referreres(making them unreachable)
48 * - check the number of referrers and instances is correct
49 * done
50 * - Debugger VM
51 * create references of all possible types to single object, ObjectReference.referringObjects should return only
52 * referrers with supported type(Strong, PhantomReference, SoftReference, WeakReference)
53 *
54 * @requires vm.gc != "Z"
55 * @library /vmTestbase
56 * /test/lib
57 * @run driver jdk.test.lib.FileInstaller . .
58 * @build nsk.jdi.ObjectReference.referringObjects.referringObjects001.referringObjects001
59 * nsk.share.jdi.TestClass1
60 * @run main/othervm/native PropertyResolvingWrapper
61 * nsk.jdi.ObjectReference.referringObjects.referringObjects001.referringObjects001
62 * -verbose
63 * -arch=${os.family}-${os.simpleArch}
64 * -waittime=5
65 * -debugee.vmkind=java
66 * -transport.address=dynamic
67 * "-debugee.vmkeys=-Xmx128M ${test.vm.opts} ${test.java.opts}"
68 */
69
70 package nsk.jdi.ObjectReference.referringObjects.referringObjects001;
71
72 import java.io.PrintStream;
73 import java.util.*;
74
134 // before debugger command (for example primitive type arrays), so we should filter such objects
135 List<ObjectReference> objectsToFilter = HeapwalkingDebugger.getObjectReferences(className, vm);
136
137 boolean includedInReferrersCount = HeapwalkingDebuggee.isIncludedIntoReferrersCount(referrerType);
138 boolean includedInInstancesCount = HeapwalkingDebuggee.isIncludedIntoInstancesCount(referrerType);
139
140 int createInstanceCount = 4;
141 int referrerCount = 10;
142
143 // create 'createInstanceCount' instances with 'referrerCount' referrers
144
145 pipe.println(HeapwalkingDebuggee.COMMAND_CREATE_INSTANCES + ":" + className + ":" + createInstanceCount + ":" + referrerCount + ":"
146 + referrerType);
147
148 int expectedInstanceCount;
149
150 if (includedInInstancesCount)
151 expectedInstanceCount = createInstanceCount;
152 else
153 expectedInstanceCount = 0;
154
155 // Note! This test is broken, in the sense that it incorrectly assumes
156 // that no GC can happen before it walks the heap. In practice, it seems
157 // to only affect this test when using ZGC. However, this test will also
158 // fail when using other GCs if an explicit GC is done here.
159
160 checkDebugeeAnswer_instanceCounts(className, expectedInstanceCount, objectsToFilter);
161 checkDebugeeAnswer_instances_referringObjects(objectsToFilter, className, expectedInstanceCount, includedInReferrersCount, referrerCount);
162
163 // delete half of referrers
164
165 int deleteCount = referrerCount / 2;
166
167 pipe.println(HeapwalkingDebuggee.COMMAND_DELETE_REFERRERS + ":" + className + ":" + deleteCount);
168
169 referrerCount -= deleteCount;
170
171 if (includedInInstancesCount)
172 expectedInstanceCount = createInstanceCount;
173 else
174 expectedInstanceCount = 0;
175
176 checkDebugeeAnswer_instanceCounts(className, expectedInstanceCount, objectsToFilter);
177 checkDebugeeAnswer_instances_referringObjects(objectsToFilter, className, expectedInstanceCount, includedInReferrersCount, referrerCount);
178
|