600 HandleMark hm;
601 // We would need multiple old-gen queues otherwise.
602 assert(gch->n_gens() == 2, "Par young collection currently only works with one older gen.");
603
604 ParScanThreadState& par_scan_state = _state_set->thread_state(worker_id);
605 assert(_state_set->is_valid(worker_id), "Should not have been called");
606
607 par_scan_state.set_young_old_boundary(_young_old_boundary);
608
609 KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(),
610 gch->rem_set()->klass_rem_set());
611 CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure,
612 &par_scan_state.to_space_root_closure(),
613 false);
614
615 par_scan_state.start_strong_roots();
616 gch->gen_process_roots(_gen->level(),
617 true, // Process younger gens, if any,
618 // as strong roots.
619 false, // no scope; this is parallel code
620 SharedHeap::SO_ScavengeCodeCache,
621 GenCollectedHeap::StrongAndWeakRoots,
622 &par_scan_state.to_space_root_closure(),
623 &par_scan_state.older_gen_closure(),
624 &cld_scan_closure);
625
626 par_scan_state.end_strong_roots();
627
628 // "evacuate followers".
629 par_scan_state.evacuate_followers_closure().do_void();
630 }
631
632 #ifdef _MSC_VER
633 #pragma warning( push )
634 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
635 #endif
636 ParNewGeneration::
637 ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level)
638 : DefNewGeneration(rs, initial_byte_size, level, "PCopy"),
639 _overflow_list(NULL),
640 _is_alive_closure(this),
|
600 HandleMark hm;
601 // We would need multiple old-gen queues otherwise.
602 assert(gch->n_gens() == 2, "Par young collection currently only works with one older gen.");
603
604 ParScanThreadState& par_scan_state = _state_set->thread_state(worker_id);
605 assert(_state_set->is_valid(worker_id), "Should not have been called");
606
607 par_scan_state.set_young_old_boundary(_young_old_boundary);
608
609 KlassScanClosure klass_scan_closure(&par_scan_state.to_space_root_closure(),
610 gch->rem_set()->klass_rem_set());
611 CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure,
612 &par_scan_state.to_space_root_closure(),
613 false);
614
615 par_scan_state.start_strong_roots();
616 gch->gen_process_roots(_gen->level(),
617 true, // Process younger gens, if any,
618 // as strong roots.
619 false, // no scope; this is parallel code
620 GenCollectedHeap::SO_ScavengeCodeCache,
621 GenCollectedHeap::StrongAndWeakRoots,
622 &par_scan_state.to_space_root_closure(),
623 &par_scan_state.older_gen_closure(),
624 &cld_scan_closure);
625
626 par_scan_state.end_strong_roots();
627
628 // "evacuate followers".
629 par_scan_state.evacuate_followers_closure().do_void();
630 }
631
632 #ifdef _MSC_VER
633 #pragma warning( push )
634 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
635 #endif
636 ParNewGeneration::
637 ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level)
638 : DefNewGeneration(rs, initial_byte_size, level, "PCopy"),
639 _overflow_list(NULL),
640 _is_alive_closure(this),
|