< prev index next >
src/hotspot/share/memory/heapInspection.cpp
Print this page
*** 573,589 ****
uintx HeapInspection::populate_table(KlassInfoTable* cit, BoolObjectClosure *filter, uint parallel_thread_num) {
// Try parallel first.
if (parallel_thread_num > 1) {
ResourceMark rm;
! ParallelObjectIterator* poi = Universe::heap()->parallel_object_iterator(parallel_thread_num);
! if (poi != NULL) {
! ParHeapInspectTask task(poi, cit, filter);
! Universe::heap()->run_task_at_safepoint(&task, parallel_thread_num);
! delete poi;
! if (task.success()) {
! return task.missed_count();
}
}
}
ResourceMark rm;
--- 573,602 ----
uintx HeapInspection::populate_table(KlassInfoTable* cit, BoolObjectClosure *filter, uint parallel_thread_num) {
// Try parallel first.
if (parallel_thread_num > 1) {
ResourceMark rm;
!
! WorkGang* gang = Universe::heap()->get_safepoint_workers();
! if (gang != NULL) {
! // The GC provided a WorkGang to be used during a safepoint.
!
! // Can't run with more threads than provided by the WorkGang.
! WithUpdatedActiveWorkers update_and_restore(gang, parallel_thread_num);
!
! ParallelObjectIterator* poi = Universe::heap()->parallel_object_iterator(gang->active_workers());
! if (poi != NULL) {
! // The GC supports parallel object iteration.
!
! ParHeapInspectTask task(poi, cit, filter);
! // Run task with the active workers.
! gang->run_task(&task);
!
! delete poi;
! if (task.success()) {
! return task.missed_count();
! }
}
}
}
ResourceMark rm;
< prev index next >