< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
Print this page
rev 55429 : 8226413: Shenandoah: Separate root scanner for SH::object_iterate()
*** 1277,1294 ****
// Reset bitmap
_aux_bit_map.clear();
Stack<oop,mtGC> oop_stack;
! // First, we process all GC roots. This populates the work stack with initial objects.
! ShenandoahAllRootScanner rp(1, ShenandoahPhaseTimings::_num_phases);
ObjectIterateScanRootClosure oops(&_aux_bit_map, &oop_stack);
if (unload_classes()) {
! rp.strong_roots_do_unchecked(&oops);
} else {
! rp.roots_do_unchecked(&oops);
}
// Work through the oop stack to traverse heap.
while (! oop_stack.is_empty()) {
oop obj = oop_stack.pop();
--- 1277,1294 ----
// Reset bitmap
_aux_bit_map.clear();
Stack<oop,mtGC> oop_stack;
! // First, we process GC roots according to current GC cycle. This populates the work stack with initial objects.
! ShenandoahHeapIterationRootScanner rp;
ObjectIterateScanRootClosure oops(&_aux_bit_map, &oop_stack);
if (unload_classes()) {
! rp.strong_roots_do(&oops);
} else {
! rp.roots_do(&oops);
}
// Work through the oop stack to traverse heap.
while (! oop_stack.is_empty()) {
oop obj = oop_stack.pop();
< prev index next >