612 |
612 |
613 par_scan_state.set_young_old_boundary(_young_old_boundary); |
613 par_scan_state.set_young_old_boundary(_young_old_boundary); |
614 |
614 |
615 KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(), |
615 KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(), |
616 gch->rem_set()->klass_rem_set()); |
616 gch->rem_set()->klass_rem_set()); |
617 |
617 CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure, |
618 int so = SharedHeap::SO_AllClasses | SharedHeap::SO_Strings | SharedHeap::SO_ScavengeCodeCache; |
618 &par_scan_state.to_space_root_closure(), |
|
619 false); |
619 |
620 |
620 par_scan_state.start_strong_roots(); |
621 par_scan_state.start_strong_roots(); |
621 gch->gen_process_strong_roots(_gen->level(), |
622 gch->gen_process_roots(_gen->level(), |
622 true, // Process younger gens, if any, |
623 true, // Process younger gens, if any, |
623 // as strong roots. |
624 // as strong roots. |
624 false, // no scope; this is parallel code |
625 false, // no scope; this is parallel code |
625 SharedHeap::ScanningOption(so), |
626 SharedHeap::SO_ScavengeCodeCache, |
626 &par_scan_state.to_space_root_closure(), |
627 GenCollectedHeap::StrongAndWeakRoots, |
627 &par_scan_state.older_gen_closure(), |
628 &par_scan_state.to_space_root_closure(), |
628 &klass_scan_closure); |
629 &par_scan_state.older_gen_closure(), |
|
630 &cld_scan_closure); |
|
631 |
629 par_scan_state.end_strong_roots(); |
632 par_scan_state.end_strong_roots(); |
630 |
633 |
631 // "evacuate followers". |
634 // "evacuate followers". |
632 par_scan_state.evacuate_followers_closure().do_void(); |
635 par_scan_state.evacuate_followers_closure().do_void(); |
633 } |
636 } |