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! 156 // Test broken - assumes that no GC is run before heap walk. 157 // G1 fails, just like ZGC, if en explicitly GC is done here. 158 // forceGC(); 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 | 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 |