123 assert(heap->marking_context()->is_bitmap_clear(), "sanity");
124 assert(!heap->marking_context()->is_complete(), "sanity");
125
126 // d. Abandon reference discovery and clear all discovered references.
127 ReferenceProcessor* rp = heap->ref_processor();
128 rp->disable_discovery();
129 rp->abandon_partial_discovery();
130 rp->verify_no_references_recorded();
131
132 // e. Set back forwarded objects bit back, in case some steps above dropped it.
133 heap->set_has_forwarded_objects(has_forwarded_objects);
134
135 // f. Sync pinned region status from the CP marks
136 heap->sync_pinned_region_status();
137
138 // The rest of prologue:
139 BiasedLocking::preserve_marks();
140 _preserved_marks->init(heap->workers()->active_workers());
141 }
142
143 heap->make_parsable(true);
144
145 OrderAccess::fence();
146
147 phase1_mark_heap();
148
149 // Once marking is done, which may have fixed up forwarded objects, we can drop it.
150 // Coming out of Full GC, we would not have any forwarded objects.
151 // This also prevents resolves with fwdptr from kicking in while adjusting pointers in phase3.
152 heap->set_has_forwarded_objects(false);
153
154 heap->set_full_gc_move_in_progress(true);
155
156 // Setup workers for the rest
157 OrderAccess::fence();
158
159 // Initialize worker slices
160 ShenandoahHeapRegionSet** worker_slices = NEW_C_HEAP_ARRAY(ShenandoahHeapRegionSet*, heap->max_workers(), mtGC);
161 for (uint i = 0; i < heap->max_workers(); i++) {
162 worker_slices[i] = new ShenandoahHeapRegionSet();
163 }
|
123 assert(heap->marking_context()->is_bitmap_clear(), "sanity");
124 assert(!heap->marking_context()->is_complete(), "sanity");
125
126 // d. Abandon reference discovery and clear all discovered references.
127 ReferenceProcessor* rp = heap->ref_processor();
128 rp->disable_discovery();
129 rp->abandon_partial_discovery();
130 rp->verify_no_references_recorded();
131
132 // e. Set back forwarded objects bit back, in case some steps above dropped it.
133 heap->set_has_forwarded_objects(has_forwarded_objects);
134
135 // f. Sync pinned region status from the CP marks
136 heap->sync_pinned_region_status();
137
138 // The rest of prologue:
139 BiasedLocking::preserve_marks();
140 _preserved_marks->init(heap->workers()->active_workers());
141 }
142
143 if (UseTLAB) {
144 heap->gclabs_retire(true);
145 heap->tlabs_retire(true);
146 }
147
148 OrderAccess::fence();
149
150 phase1_mark_heap();
151
152 // Once marking is done, which may have fixed up forwarded objects, we can drop it.
153 // Coming out of Full GC, we would not have any forwarded objects.
154 // This also prevents resolves with fwdptr from kicking in while adjusting pointers in phase3.
155 heap->set_has_forwarded_objects(false);
156
157 heap->set_full_gc_move_in_progress(true);
158
159 // Setup workers for the rest
160 OrderAccess::fence();
161
162 // Initialize worker slices
163 ShenandoahHeapRegionSet** worker_slices = NEW_C_HEAP_ARRAY(ShenandoahHeapRegionSet*, heap->max_workers(), mtGC);
164 for (uint i = 0; i < heap->max_workers(); i++) {
165 worker_slices[i] = new ShenandoahHeapRegionSet();
166 }
|