683 CLDClosure* weak_cld_closure = only_strong_roots ? NULL : cld_closure;
684
685 process_roots(scope, so,
686 not_older_gens, weak_roots,
687 cld_closure, weak_cld_closure,
688 &mark_code_closure);
689
690 if (younger_gens_as_roots) {
691 if (!_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) {
692 if (level == 1) {
693 not_older_gens->set_generation(_young_gen);
694 _young_gen->oop_iterate(not_older_gens);
695 }
696 not_older_gens->reset_generation();
697 }
698 }
699 // When collection is parallel, all threads get to cooperate to do
700 // older-gen scanning.
701 if (level == 0) {
702 older_gens->set_generation(_old_gen);
703 rem_set()->younger_refs_iterate(_old_gen, older_gens);
704 older_gens->reset_generation();
705 }
706
707 _process_strong_tasks->all_tasks_completed(scope->n_threads());
708 }
709
710
711 class AlwaysTrueClosure: public BoolObjectClosure {
712 public:
713 bool do_object_b(oop p) { return true; }
714 };
715 static AlwaysTrueClosure always_true;
716
717 void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure) {
718 JNIHandles::weak_oops_do(&always_true, root_closure);
719 _young_gen->ref_processor()->weak_oops_do(root_closure);
720 _old_gen->ref_processor()->weak_oops_do(root_closure);
721 }
722
723 #define GCH_SINCE_SAVE_MARKS_ITERATE_DEFN(OopClosureType, nv_suffix) \
|
683 CLDClosure* weak_cld_closure = only_strong_roots ? NULL : cld_closure;
684
685 process_roots(scope, so,
686 not_older_gens, weak_roots,
687 cld_closure, weak_cld_closure,
688 &mark_code_closure);
689
690 if (younger_gens_as_roots) {
691 if (!_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) {
692 if (level == 1) {
693 not_older_gens->set_generation(_young_gen);
694 _young_gen->oop_iterate(not_older_gens);
695 }
696 not_older_gens->reset_generation();
697 }
698 }
699 // When collection is parallel, all threads get to cooperate to do
700 // older-gen scanning.
701 if (level == 0) {
702 older_gens->set_generation(_old_gen);
703 rem_set()->younger_refs_iterate(_old_gen, older_gens, scope->n_threads());
704 older_gens->reset_generation();
705 }
706
707 _process_strong_tasks->all_tasks_completed(scope->n_threads());
708 }
709
710
711 class AlwaysTrueClosure: public BoolObjectClosure {
712 public:
713 bool do_object_b(oop p) { return true; }
714 };
715 static AlwaysTrueClosure always_true;
716
717 void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure) {
718 JNIHandles::weak_oops_do(&always_true, root_closure);
719 _young_gen->ref_processor()->weak_oops_do(root_closure);
720 _old_gen->ref_processor()->weak_oops_do(root_closure);
721 }
722
723 #define GCH_SINCE_SAVE_MARKS_ITERATE_DEFN(OopClosureType, nv_suffix) \
|