< prev index next >

src/share/vm/gc/shenandoah/vm_operations_shenandoah.hpp

Print this page
rev 13387 : [mq]: parallel_sp_cleaning.patch

@@ -40,11 +40,12 @@
 
 class VM_ShenandoahOperation : public VM_Operation {
 protected:
   uint         _gc_id;
 public:
-  VM_ShenandoahOperation() : _gc_id(GCId::current()) {};
+  bool _safepoint_cleanup_done;
+  VM_ShenandoahOperation() : _gc_id(GCId::current()), _safepoint_cleanup_done(false) {};
 };
 
 class VM_ShenandoahReferenceOperation : public VM_ShenandoahOperation {
 public:
   VM_ShenandoahReferenceOperation() : VM_ShenandoahOperation() {};

@@ -56,36 +57,45 @@
 public:
   VM_ShenandoahInitMark() : VM_ShenandoahOperation() {};
   VM_Operation::VMOp_Type type() const { return VMOp_ShenandoahInitMark; }
   const char* name()             const { return "Shenandoah Init Marking"; }
   virtual void doit();
+  bool deflates_idle_monitors() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
+  bool marks_nmethods() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
+
 };
 
 class VM_ShenandoahFinalMarkStartEvac: public VM_ShenandoahReferenceOperation {
 public:
   VM_ShenandoahFinalMarkStartEvac() : VM_ShenandoahReferenceOperation() {};
   VM_Operation::VMOp_Type type() const { return VMOp_ShenandoahFinalMarkStartEvac; }
   const char* name()             const { return "Shenandoah Final Mark and Start Evacuation"; }
   virtual  void doit();
+  bool deflates_idle_monitors() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
+  bool marks_nmethods() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
 };
 
 class VM_ShenandoahFullGC : public VM_ShenandoahReferenceOperation {
 private:
   GCCause::Cause _gc_cause;
 public:
   VM_ShenandoahFullGC(GCCause::Cause gc_cause) : VM_ShenandoahReferenceOperation(), _gc_cause(gc_cause) {};
   VM_Operation::VMOp_Type type() const { return VMOp_ShenandoahFullGC; }
   const char* name()             const { return "Shenandoah Full GC"; }
   virtual void doit();
+  bool deflates_idle_monitors() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
+  bool marks_nmethods() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
 };
 
 class VM_ShenandoahPartialGC: public VM_ShenandoahOperation {
 public:
   VM_ShenandoahPartialGC() : VM_ShenandoahOperation() {};
   VM_Operation::VMOp_Type type() const { return VMOp_ShenandoahPartialGC; }
   const char* name()             const { return "Shenandoah Partial Collection"; }
   virtual void doit();
+  bool deflates_idle_monitors() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
+  bool marks_nmethods() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
 };
 
 class VM_ShenandoahInitUpdateRefs: public VM_ShenandoahOperation {
 public:
   VM_ShenandoahInitUpdateRefs() : VM_ShenandoahOperation() {};

@@ -98,10 +108,12 @@
 public:
   VM_ShenandoahFinalUpdateRefs() : VM_ShenandoahOperation() {};
   VM_Operation::VMOp_Type type() const { return VMOp_ShenandoahFinalUpdateRefs; }
   const char* name()             const { return "Shenandoah Final Update References"; }
   virtual void doit();
+  bool deflates_idle_monitors() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
+  bool marks_nmethods() { return ShenandoahSPCleanup && ! _safepoint_cleanup_done; }
 };
 
 class VM_ShenandoahVerifyHeapAfterEvacuation: public VM_ShenandoahOperation {
 public:
   VM_ShenandoahVerifyHeapAfterEvacuation() : VM_ShenandoahOperation() {};
< prev index next >