< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.hpp

Print this page
rev 50076 : Fold Partial GC into Traversal GC

@@ -23,10 +23,11 @@
 
 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHTRAVERSALGC_HPP
 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHTRAVERSALGC_HPP
 
 #include "memory/allocation.hpp"
+#include "gc/shenandoah/shenandoahHeapRegionSet.hpp"
 #include "gc/shenandoah/shenandoahTaskqueue.hpp"
 
 class Thread;
 class ShenandoahHeapRegionSet;
 class ShenandoahHeap;

@@ -45,22 +46,32 @@
   // there is a tradeoff between static/dynamic footprint that translates
   // into cache pressure (which is already high during marking), and
   // too many atomic updates. size_t/jint is too large, jbyte is too small.
   jushort** _liveness_local;
 
+  ShenandoahHeapRegionSet* const _traversal_set;
+  ShenandoahHeapRegionSet* const _root_regions;
+
+  ShenandoahHeapRegionSetIterator _root_regions_iterator;
+
+  ShenandoahConnectionMatrix* const _matrix;
+
 public:
   ShenandoahTraversalGC(ShenandoahHeap* heap, size_t num_regions);
   ~ShenandoahTraversalGC();
 
+  ShenandoahHeapRegionSet* const traversal_set() const { return _traversal_set; }
+  ShenandoahHeapRegionSet* const root_regions()  const { return _root_regions;}
+
   void reset();
   void prepare();
   void init_traversal_collection();
   void concurrent_traversal_collection();
   void final_traversal_collection();
 
-  template <class T, bool STRING_DEDUP, bool DEGEN>
-  inline void process_oop(T* p, Thread* thread, ShenandoahObjToScanQueue* queue, ShenandoahStrDedupQueue* dq = NULL);
+  template <class T, bool STRING_DEDUP, bool DEGEN, bool UPDATE_MATRIX>
+  inline void process_oop(T* p, Thread* thread, ShenandoahObjToScanQueue* queue, oop base_obj, ShenandoahStrDedupQueue* dq = NULL);
 
   bool check_and_handle_cancelled_gc(ParallelTaskTerminator* terminator);
 
   ShenandoahObjToScanQueueSet* task_queues();
 

@@ -69,10 +80,12 @@
 
   void main_loop(uint worker_id, ParallelTaskTerminator* terminator, bool do_satb);
 
 private:
 
+  void prepare_regions();
+
   template <bool DO_SATB>
   void main_loop_prework(uint w, ParallelTaskTerminator* t);
 
   template <class T, bool DO_SATB>
   void main_loop_work(T* cl, jushort* live_data, uint worker_id, ParallelTaskTerminator* terminator);
< prev index next >