void VM_GC_HeapInspection::doit() { HandleMark hm; CollectedHeap* ch = Universe::heap(); ch->ensure_parsability(false); // must happen, even if collection does // not happen (e.g. due to GC_locker) if (_full_gc) { // The collection attempt below would be skipped anyway if // the gc locker is held. The following dump may then be a tad // misleading to someone expecting only live objects to show // up in the dump (see CR 6944195). Just issue a suitable warning // in that case and do not attempt to do a collection. // The latter is a subtle point, because even a failed attempt // to GC will, in fact, induce one in the future, which we // probably want to avoid in this case because the GC that we may // be about to attempt holds value for us only // if it happens now and not if it happens in the eventual // future. if (GC_locker::is_active()) { warning("GC locker is held; pre-dump GC was skipped"); } else { ch->collect_as_vm_thread(GCCause::_heap_inspection); } } HeapInspection::heap_inspection(_out, _need_prologue /* need_prologue */); }
void VM_GC_ObjectAddressInfoCollection::doit() { HandleMark hm; CollectedHeap* ch = Universe::heap(); ch->ensure_parsability(false); // must happen, even if collection does // not happen (e.g. due to GC_locker) ObjectAddressInfoCollection::collect_object_address_info(_addrinfo_log, _krinfo_log, _reason); }
void VM_GC_ObjectInfoCollection::doit() { HandleMark hm; CollectedHeap* ch = Universe::heap(); ch->ensure_parsability(false); // must happen, even if collection does // not happen (e.g. due to GC_locker) ObjectInfoCollection::collect_object_info(_objinfo_log, _apinfo_log, _reason); if (CrashOnObjectInfoDump) { guarantee(false, "requested crash after object info dump"); } }