in src/main/java/com/jetbrains/jdi/VirtualMachineImpl.java [1411:1446]
private void processBatchedDisposes() {
if (shutdown) {
return;
}
JDWP.VirtualMachine.DisposeObjects.Request[] requests = null;
synchronized(batchedDisposeRequests) {
int size = batchedDisposeRequests.size();
if (size >= DISPOSE_THRESHOLD) {
if ((traceFlags & TRACE_OBJREFS) != 0) {
printTrace("Dispose threshold reached. Will dispose "
+ size + " object references...");
}
requests = new JDWP.VirtualMachine.DisposeObjects.Request[size];
for (int i = 0; i < requests.length; i++) {
SoftObjectReference ref = batchedDisposeRequests.get(i);
if ((traceFlags & TRACE_OBJREFS) != 0) {
printTrace("Disposing object " + ref.key() +
" (ref count = " + ref.count() + ")");
}
// This is kludgy. We temporarily re-create an object
// reference so that we can correctly pass its id to the
// JDWP command.
requests[i] =
new JDWP.VirtualMachine.DisposeObjects.Request(
new ObjectReferenceImpl(this, ref.key()),
ref.count());
}
batchedDisposeRequests.clear();
}
}
if (requests != null) {
JDWP.VirtualMachine.DisposeObjects.processAsync(vm, requests);
}
}