< prev index next >

src/share/vm/runtime/thread.hpp

Print this page
rev 8615 : CMSParallelFullGC: Parallel version of CMS Full GC.

@@ -77,10 +77,11 @@
 class jvmtiDeferredLocalVariableSet;
 
 class GCTaskQueue;
 class ThreadClosure;
 class IdealGraphPrinter;
+class NamedThread;
 
 class Metadata;
 template <class T, MEMFLAGS F> class ChunkedList;
 typedef ChunkedList<Metadata*, mtInternal> MetadataOnStackBuffer;
 

@@ -322,10 +323,11 @@
   virtual bool is_jvmti_agent_thread() const         { return false; }
   // True iff the thread can perform GC operations at a safepoint.
   // Generally will be true only of VM thread and parallel GC WorkGang
   // threads.
   virtual bool is_GC_task_thread() const             { return false; }
+  virtual bool is_GangWorker_thread() const          { return false; }
   virtual bool is_Watcher_thread() const             { return false; }
   virtual bool is_ConcurrentGC_thread() const        { return false; }
   virtual bool is_Named_thread() const               { return false; }
   virtual bool is_Worker_thread() const              { return false; }
 

@@ -633,10 +635,15 @@
   static void SpinAcquire(volatile int * Lock, const char * Name);
   static void SpinRelease(volatile int * Lock);
   static void muxAcquire(volatile intptr_t * Lock, const char * Name);
   static void muxAcquireW(volatile intptr_t * Lock, ParkEvent * ev);
   static void muxRelease(volatile intptr_t * Lock);
+
+  NamedThread* as_Named_thread() {
+    assert(is_Named_thread(), "Must be a NamedThread");
+    return (NamedThread*) this;
+  }
 };
 
 // Inline implementation of Thread::current()
 // Thread::current is "hot" it's called > 128K times in the 1st 500 msecs of
 // startup.

@@ -680,10 +687,33 @@
   virtual bool is_Named_thread() const { return true; }
   virtual char* name() const { return _name == NULL ? (char*)"Unknown Thread" : _name; }
   JavaThread *processed_thread() { return _processed_thread; }
   void set_processed_thread(JavaThread *thread) { _processed_thread = thread; }
   virtual void print_on(outputStream* st) const;
+
+  // Support for CMSParallelFullGC
+  // Should be OopTaskQueue* but use void* to break the dependency cycle
+  void*                           _pms_task_queue;
+  void*                           _pms_objarray_task_queue;
+  // Should be Stack<markOop>* but use void* to break the dependency cycle
+  void*                           _pms_preserved_mark_stack;
+  // Should be Stack<oop>* but use void* to break the dependency cycle
+  void*                           _pms_preserved_oop_stack;
+  size_t                          _pms_preserved_count;
+  size_t                          _pms_preserved_count_max;
+  // Should be PreservedMark* but use void* to break the dependency cycle
+  void*                           _pms_preserved_marks;
+
+  void reset_pms_data() {
+    _pms_task_queue = NULL;
+    _pms_objarray_task_queue = NULL;
+    _pms_preserved_mark_stack = NULL;
+    _pms_preserved_oop_stack = NULL;
+    _pms_preserved_count = 0;
+    _pms_preserved_count_max = 0;
+    _pms_preserved_marks = NULL;
+  }
 };
 
 // Worker threads are named and have an id of an assigned work.
 class WorkerThread: public NamedThread {
  private:
< prev index next >