< prev index next >
src/share/vm/runtime/safepoint.hpp
Print this page
rev 13047 : [mq]: 8180932.patch
@@ -49,10 +49,12 @@
class ThreadSafepointState;
class SnippetCache;
class nmethod;
+class WorkGang;
+class SubTasksDone;
//
// Implements roll-forward to safepoint (safepoint synchronization)
//
class SafepointSynchronize : AllStatic {
@@ -73,10 +75,21 @@
enum SafepointTimeoutReason {
_spinning_timeout = 0,
_blocking_timeout = 1
};
+ 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
+ };
+
typedef struct {
float _time_stamp; // record when the current safepoint occurs in seconds
int _vmop_type; // type of VM operation triggers the safepoint
int _nof_total_threads; // total number of Java threads
int _nof_initial_running_threads; // total number of initially seen running threads
@@ -101,10 +114,11 @@
// safepoint. The fact that Threads_lock is held throughout each pair of
// increments (at the beginning and end of each safepoint) guarantees
// race freedom.
public:
static volatile int _safepoint_counter;
+ static uint _num_cleanup_workers;
private:
static long _end_of_last_safepoint; // Time of last safepoint in milliseconds
// Statistics
static jlong _safepoint_begin_time; // time when safepoint begins
@@ -127,10 +141,14 @@
}
// For debug long safepoint
static void print_safepoint_timeout(SafepointTimeoutReason timeout_reason);
+ // Parallel cleanup
+ static WorkGang* _cleanup_workers;
+ static SubTasksDone* _cleanup_subtasks;
+
public:
// Main entry points
// Roll all threads forward to safepoint. Must be called by the
< prev index next >