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