< prev index next >

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

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

*** 23,32 **** --- 23,33 ---- #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,66 **** // 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; public: ShenandoahTraversalGC(ShenandoahHeap* heap, size_t num_regions); ~ShenandoahTraversalGC(); 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); bool check_and_handle_cancelled_gc(ParallelTaskTerminator* terminator); ShenandoahObjToScanQueueSet* task_queues(); --- 46,77 ---- // 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, 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,78 **** --- 80,91 ---- 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 >