@@ -91,8 +91,8 @@ class ShenandoahBreakpointMarkScope : public StackObj {
9191};
9292
9393ShenandoahConcurrentGC::ShenandoahConcurrentGC (ShenandoahGeneration* generation, bool do_old_gc_bootstrap) :
94+ ShenandoahGC(generation),
9495 _mark(generation),
95- _generation(generation),
9696 _degen_point(ShenandoahDegenPoint::_degenerated_unset),
9797 _abbreviated(false ),
9898 _do_old_gc_bootstrap(do_old_gc_bootstrap) {
@@ -576,7 +576,7 @@ void ShenandoahConcurrentGC::entry_promote_in_place() const {
576576 ShenandoahGCWorkerPhase worker_phase (ShenandoahPhaseTimings::promote_in_place);
577577 EventMark em (" %s" , " Promote in place" );
578578
579- ShenandoahGenerationalHeap::heap ()->promote_regions_in_place (true );
579+ ShenandoahGenerationalHeap::heap ()->promote_regions_in_place (_generation, true );
580580}
581581
582582void ShenandoahConcurrentGC::entry_update_thread_roots () {
@@ -706,7 +706,7 @@ void ShenandoahConcurrentGC::op_init_mark() {
706706
707707 if (ShenandoahVerify) {
708708 ShenandoahTimingsTracker v (ShenandoahPhaseTimings::init_mark_verify);
709- heap->verifier ()->verify_before_concmark ();
709+ heap->verifier ()->verify_before_concmark (_generation );
710710 }
711711
712712 if (VerifyBeforeGC) {
@@ -763,7 +763,7 @@ void ShenandoahConcurrentGC::op_final_mark() {
763763 assert (!heap->has_forwarded_objects (), " No forwarded objects on this path" );
764764
765765 if (ShenandoahVerify) {
766- heap->verifier ()->verify_roots_no_forwarded ();
766+ heap->verifier ()->verify_roots_no_forwarded (_generation );
767767 }
768768
769769 if (!heap->cancelled_gc ()) {
@@ -791,7 +791,7 @@ void ShenandoahConcurrentGC::op_final_mark() {
791791
792792 if (ShenandoahVerify) {
793793 ShenandoahTimingsTracker v (ShenandoahPhaseTimings::final_mark_verify);
794- heap->verifier ()->verify_before_evacuation ();
794+ heap->verifier ()->verify_before_evacuation (_generation );
795795 }
796796
797797 heap->set_evacuation_in_progress (true );
@@ -806,9 +806,9 @@ void ShenandoahConcurrentGC::op_final_mark() {
806806 if (ShenandoahVerify) {
807807 ShenandoahTimingsTracker v (ShenandoahPhaseTimings::final_mark_verify);
808808 if (has_in_place_promotions (heap)) {
809- heap->verifier ()->verify_after_concmark_with_promotions ();
809+ heap->verifier ()->verify_after_concmark_with_promotions (_generation );
810810 } else {
811- heap->verifier ()->verify_after_concmark ();
811+ heap->verifier ()->verify_after_concmark (_generation );
812812 }
813813 }
814814 }
@@ -877,18 +877,20 @@ void ShenandoahConcurrentGC::op_weak_refs() {
877877class ShenandoahEvacUpdateCleanupOopStorageRootsClosure : public BasicOopIterateClosure {
878878private:
879879 ShenandoahHeap* const _heap;
880+ ShenandoahGeneration* const _generation;
880881 ShenandoahMarkingContext* const _mark_context;
881882 bool _evac_in_progress;
882883 Thread* const _thread;
883884
884885public:
885- ShenandoahEvacUpdateCleanupOopStorageRootsClosure ();
886+ explicit ShenandoahEvacUpdateCleanupOopStorageRootsClosure (ShenandoahGeneration* generation );
886887 void do_oop (oop* p);
887888 void do_oop (narrowOop* p);
888889};
889890
890- ShenandoahEvacUpdateCleanupOopStorageRootsClosure::ShenandoahEvacUpdateCleanupOopStorageRootsClosure () :
891+ ShenandoahEvacUpdateCleanupOopStorageRootsClosure::ShenandoahEvacUpdateCleanupOopStorageRootsClosure (ShenandoahGeneration* generation ) :
891892 _heap(ShenandoahHeap::heap()),
893+ _generation(generation),
892894 _mark_context(ShenandoahHeap::heap()->marking_context()),
893895 _evac_in_progress(ShenandoahHeap::heap()->is_evacuation_in_progress()),
894896 _thread(Thread::current()) {
@@ -898,8 +900,7 @@ void ShenandoahEvacUpdateCleanupOopStorageRootsClosure::do_oop(oop* p) {
898900 const oop obj = RawAccess<>::oop_load (p);
899901 if (!CompressedOops::is_null (obj)) {
900902 if (!_mark_context->is_marked (obj)) {
901- shenandoah_assert_generations_reconciled ();
902- if (_heap->is_in_active_generation (obj)) {
903+ if (_generation->contains (obj)) {
903904 // Note: The obj is dead here. Do not touch it, just clear.
904905 ShenandoahHeap::atomic_clear_oop (p, obj);
905906 }
@@ -942,29 +943,31 @@ class ShenandoahConcurrentWeakRootsEvacUpdateTask : public WorkerTask {
942943 ShenandoahClassLoaderDataRoots<true /* concurrent */ >
943944 _cld_roots;
944945 ShenandoahConcurrentNMethodIterator _nmethod_itr;
946+ ShenandoahGeneration* _generation;
945947 ShenandoahPhaseTimings::Phase _phase;
946948
947949public:
948- ShenandoahConcurrentWeakRootsEvacUpdateTask (ShenandoahPhaseTimings::Phase phase) :
950+ ShenandoahConcurrentWeakRootsEvacUpdateTask (ShenandoahGeneration* generation, ShenandoahPhaseTimings::Phase phase) :
949951 WorkerTask (" Shenandoah Evacuate/Update Concurrent Weak Roots" ),
950952 _vm_roots (phase),
951953 _cld_roots (phase, ShenandoahHeap::heap()->workers ()->active_workers(), false /* heap iteration*/ ),
952954 _nmethod_itr(ShenandoahCodeRoots::table()),
955+ _generation(generation),
953956 _phase(phase) {}
954957
955958 ~ShenandoahConcurrentWeakRootsEvacUpdateTask () {
956959 // Notify runtime data structures of potentially dead oops
957960 _vm_roots.report_num_dead ();
958961 }
959962
960- void work (uint worker_id) {
963+ void work (uint worker_id) override {
961964 ShenandoahConcurrentWorkerSession worker_session (worker_id);
962965 ShenandoahSuspendibleThreadSetJoiner sts_join;
963966 {
964967 ShenandoahEvacOOMScope oom;
965968 // jni_roots and weak_roots are OopStorage backed roots, concurrent iteration
966969 // may race against OopStorage::release() calls.
967- ShenandoahEvacUpdateCleanupOopStorageRootsClosure cl;
970+ ShenandoahEvacUpdateCleanupOopStorageRootsClosure cl (_generation) ;
968971 _vm_roots.oops_do (&cl, worker_id);
969972 }
970973
@@ -999,7 +1002,7 @@ void ShenandoahConcurrentGC::op_weak_roots() {
9991002 // Concurrent weak root processing
10001003 ShenandoahTimingsTracker t (ShenandoahPhaseTimings::conc_weak_roots_work);
10011004 ShenandoahGCWorkerPhase worker_phase (ShenandoahPhaseTimings::conc_weak_roots_work);
1002- ShenandoahConcurrentWeakRootsEvacUpdateTask task (ShenandoahPhaseTimings::conc_weak_roots_work);
1005+ ShenandoahConcurrentWeakRootsEvacUpdateTask task (_generation, ShenandoahPhaseTimings::conc_weak_roots_work);
10031006 heap->workers ()->run_task (&task);
10041007 }
10051008
@@ -1105,19 +1108,19 @@ void ShenandoahConcurrentGC::op_cleanup_early() {
11051108}
11061109
11071110void ShenandoahConcurrentGC::op_evacuate () {
1108- ShenandoahHeap::heap ()->evacuate_collection_set (true /* concurrent*/ );
1111+ ShenandoahHeap::heap ()->evacuate_collection_set (_generation, true /* concurrent*/ );
11091112}
11101113
11111114void ShenandoahConcurrentGC::op_init_update_refs () {
1112- ShenandoahHeap* const heap = ShenandoahHeap::heap ();
11131115 if (ShenandoahVerify) {
1116+ ShenandoahHeap* const heap = ShenandoahHeap::heap ();
11141117 ShenandoahTimingsTracker v (ShenandoahPhaseTimings::init_update_refs_verify);
1115- heap->verifier ()->verify_before_update_refs ();
1118+ heap->verifier ()->verify_before_update_refs (_generation );
11161119 }
11171120}
11181121
11191122void ShenandoahConcurrentGC::op_update_refs () {
1120- ShenandoahHeap::heap ()->update_heap_references (true /* concurrent*/ );
1123+ ShenandoahHeap::heap ()->update_heap_references (_generation, true /* concurrent*/ );
11211124}
11221125
11231126class ShenandoahUpdateThreadHandshakeClosure : public HandshakeClosure {
@@ -1163,7 +1166,7 @@ void ShenandoahConcurrentGC::op_final_update_refs() {
11631166
11641167 // Has to be done before cset is clear
11651168 if (ShenandoahVerify) {
1166- heap->verifier ()->verify_roots_in_to_space ();
1169+ heap->verifier ()->verify_roots_in_to_space (_generation );
11671170 }
11681171
11691172 // If we are running in generational mode and this is an aging cycle, this will also age active
@@ -1198,7 +1201,7 @@ void ShenandoahConcurrentGC::op_final_update_refs() {
11981201
11991202 if (ShenandoahVerify) {
12001203 ShenandoahTimingsTracker v (ShenandoahPhaseTimings::final_update_refs_verify);
1201- heap->verifier ()->verify_after_update_refs ();
1204+ heap->verifier ()->verify_after_update_refs (_generation );
12021205 }
12031206
12041207 if (VerifyAfterGC) {
0 commit comments