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