< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahDegeneratedGC.cpp

Print this page
@@ -34,10 +34,11 @@
  #include "gc/shenandoah/shenandoahHeap.inline.hpp"
  #include "gc/shenandoah/shenandoahMetrics.hpp"
  #include "gc/shenandoah/shenandoahMonitoringSupport.hpp"
  #include "gc/shenandoah/shenandoahOldGeneration.hpp"
  #include "gc/shenandoah/shenandoahRootProcessor.inline.hpp"
+ #include "gc/shenandoah/shenandoahStackWatermark.hpp"
  #include "gc/shenandoah/shenandoahSTWMark.hpp"
  #include "gc/shenandoah/shenandoahUtils.hpp"
  #include "gc/shenandoah/shenandoahVerifier.hpp"
  #include "gc/shenandoah/shenandoahVMOperations.hpp"
  #include "gc/shenandoah/shenandoahWorkerPolicy.hpp"

@@ -298,14 +299,10 @@
          op_update_refs();
          op_update_roots();
          assert(!heap->cancelled_gc(), "STW reference update can not OOM");
        }
  
-       // Disarm nmethods that armed in concurrent cycle.
-       // In above case, update roots should disarm them
-       ShenandoahCodeRoots::disarm_nmethods();
- 
        op_cleanup_complete();
  
        if (heap->mode()->is_generational()) {
          ShenandoahGenerationalHeap::heap()->complete_degenerated_cycle();
        }

@@ -315,10 +312,14 @@
        ShouldNotReachHere();
    }
  
    DEBUG_ONLY(heap->assert_no_self_forwards());
  
+   // Leaving degenerated GC, we need to flip barriers back to idle.
+   ShenandoahCodeRoots::arm_nmethods();
+   ShenandoahCodeRoots::disarm_nmethods();
+ 
    if (ShenandoahVerify) {
      heap->verifier()->verify_after_degenerated(_generation);
    }
  
    if (VerifyAfterGC) {
< prev index next >