< prev index next >

src/share/vm/runtime/safepoint.hpp

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

@@ -49,10 +49,11 @@
 
 
 class ThreadSafepointState;
 class SnippetCache;
 class nmethod;
+class WorkGang;
 
 //
 // Implements roll-forward to safepoint (safepoint synchronization)
 //
 class SafepointSynchronize : AllStatic {

@@ -88,10 +89,21 @@
     jlong  _time_to_do_cleanups;               // total time in millis spent in performing cleanups
     jlong  _time_to_sync;                      // total time in millis spent in getting to _synchronized
     jlong  _time_to_exec_vmop;                 // total time in millis spent in vm operation itself
   } SafepointStats;
 
+  enum SafepointCleanupTasks {
+    SAFEPOINT_CLEANUP_DEFLATE_MONITORS,
+    SAFEPOINT_CLEANUP_UPDATE_INLINE_CACHES,
+    SAFEPOINT_CLEANUP_COMPILATION_POLICY,
+    SAFEPOINT_CLEANUP_SYMBOL_TABLE_REHASH,
+    SAFEPOINT_CLEANUP_STRING_TABLE_REHASH,
+    SAFEPOINT_CLEANUP_CLD_PURGE,
+    // Leave this one last.
+    SAFEPOINT_CLEANUP_NUM_TASKS
+  };
+
  private:
   static volatile SynchronizeState _state;     // Threads might read this flag directly, without acquiring the Threads_lock
   static volatile int _waiting_to_block;       // number of threads we are waiting for to block
   static int _current_jni_active_count;        // Counts the number of active critical natives during the safepoint
 

@@ -127,10 +139,13 @@
   }
 
   // For debug long safepoint
   static void print_safepoint_timeout(SafepointTimeoutReason timeout_reason);
 
+  // Parallel cleanup
+  static WorkGang* _cleanup_workers;
+
 public:
 
   // Main entry points
 
   // Roll all threads forward to safepoint. Must be called by the

@@ -171,10 +186,15 @@
     return _end_of_last_safepoint;
   }
   static bool is_cleanup_needed();
   static void do_cleanup_tasks();
 
+private:
+  static void serial_cleanup();
+  static void parallel_cleanup();
+
+public:
   // Debugging
   static void print_state()                                PRODUCT_RETURN;
   static void safepoint_msg(const char* format, ...) ATTRIBUTE_PRINTF(1, 2) PRODUCT_RETURN;
 
   static void deferred_initialize_stat();
< prev index next >