src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp
changeset 54687 df2b3565f343
parent 54678 93f09ca4a7f8
child 54766 1321f8cf9de5
equal deleted inserted replaced
54686:09f09b4e7808 54687:df2b3565f343
  1485   // get unmarked objects in the roots.
  1485   // get unmarked objects in the roots.
  1486 
  1486 
  1487   if (!cancelled_gc()) {
  1487   if (!cancelled_gc()) {
  1488     concurrent_mark()->finish_mark_from_roots(/* full_gc = */ false);
  1488     concurrent_mark()->finish_mark_from_roots(/* full_gc = */ false);
  1489 
  1489 
  1490     if (has_forwarded_objects()) {
  1490     // Degen may be caused by failed evacuation of roots
  1491       concurrent_mark()->update_roots(ShenandoahPhaseTimings::update_roots);
  1491     if (is_degenerated_gc_in_progress() && has_forwarded_objects()) {
       
  1492       concurrent_mark()->update_roots(ShenandoahPhaseTimings::degen_gc_update_roots);
       
  1493     }
       
  1494 
       
  1495     if (ShenandoahVerify) {
       
  1496       verifier()->verify_roots_no_forwarded();
  1492     }
  1497     }
  1493 
  1498 
  1494     stop_concurrent_marking();
  1499     stop_concurrent_marking();
  1495 
  1500 
  1496     {
  1501     {
  1538       if (ShenandoahPacing) {
  1543       if (ShenandoahPacing) {
  1539         pacer()->setup_for_evac();
  1544         pacer()->setup_for_evac();
  1540       }
  1545       }
  1541 
  1546 
  1542       if (ShenandoahVerify) {
  1547       if (ShenandoahVerify) {
       
  1548         verifier()->verify_roots_no_forwarded();
  1543         verifier()->verify_during_evacuation();
  1549         verifier()->verify_during_evacuation();
  1544       }
  1550       }
  1545     } else {
  1551     } else {
  1546       if (ShenandoahVerify) {
  1552       if (ShenandoahVerify) {
  1547         verifier()->verify_after_concmark();
  1553         verifier()->verify_after_concmark();
  2174     clear_cancelled_gc();
  2180     clear_cancelled_gc();
  2175   }
  2181   }
  2176   assert(!cancelled_gc(), "Should have been done right before");
  2182   assert(!cancelled_gc(), "Should have been done right before");
  2177 
  2183 
  2178   concurrent_mark()->update_roots(is_degenerated_gc_in_progress() ?
  2184   concurrent_mark()->update_roots(is_degenerated_gc_in_progress() ?
  2179                                  ShenandoahPhaseTimings::degen_gc_update_roots:
  2185                                   ShenandoahPhaseTimings::degen_gc_update_roots:
  2180                                  ShenandoahPhaseTimings::final_update_refs_roots);
  2186                                   ShenandoahPhaseTimings::final_update_refs_roots);
  2181 
  2187 
  2182   ShenandoahGCPhase final_update_refs(ShenandoahPhaseTimings::final_update_refs_recycle);
  2188   ShenandoahGCPhase final_update_refs(ShenandoahPhaseTimings::final_update_refs_recycle);
  2183 
  2189 
  2184   trash_cset_regions();
  2190   trash_cset_regions();
  2185   set_has_forwarded_objects(false);
  2191   set_has_forwarded_objects(false);
  2186   set_update_refs_in_progress(false);
  2192   set_update_refs_in_progress(false);
  2187 
  2193 
  2188   if (ShenandoahVerify) {
  2194   if (ShenandoahVerify) {
       
  2195     verifier()->verify_roots_no_forwarded();
  2189     verifier()->verify_after_updaterefs();
  2196     verifier()->verify_after_updaterefs();
  2190   }
  2197   }
  2191 
  2198 
  2192   if (VerifyAfterGC) {
  2199   if (VerifyAfterGC) {
  2193     Universe::verify();
  2200     Universe::verify();