< 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 >