< prev index next >

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

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

*** 45,54 **** --- 45,56 ---- ShenandoahMarkRefsSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp); ShenandoahMarkRefsSuperClosure(ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq, ReferenceProcessor* rp); template <class T, UpdateRefsMode UPDATE_MODE, bool STRING_DEDUP> void work(T *p); + + inline void set_base_object(oop obj) { /* Not needed */ } }; class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure { public: ShenandoahMarkUpdateRefsClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) :
*** 208,265 **** inline void do_oop_nv(T* p) { work<T, true>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } }; - class ShenandoahPartialEvacuateUpdateHeapClosure : public ExtendedOopClosure { - private: - ShenandoahPartialGC* _partial_gc; - Thread* _thread; - ShenandoahObjToScanQueue* _queue; - public: - ShenandoahPartialEvacuateUpdateHeapClosure(ShenandoahObjToScanQueue* q) : - _partial_gc(ShenandoahHeap::heap()->partial_gc()), - _thread(Thread::current()), _queue(q) {} - - template <class T> - void do_oop_nv(T* p); - - void do_oop(oop* p) { do_oop_nv(p); } - void do_oop(narrowOop* p) { do_oop_nv(p); } - }; - class ShenandoahTraversalSuperClosure : public MetadataAwareOopClosure { private: ShenandoahTraversalGC* _traversal_gc; Thread* _thread; ShenandoahObjToScanQueue* _queue; ShenandoahStrDedupQueue* _dedup_queue; ! protected: ShenandoahTraversalSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : MetadataAwareOopClosure(rp), _traversal_gc(ShenandoahHeap::heap()->traversal_gc()), ! _thread(Thread::current()), _queue(q), _dedup_queue(NULL) { } ShenandoahTraversalSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : MetadataAwareOopClosure(rp), _traversal_gc(ShenandoahHeap::heap()->traversal_gc()), _thread(Thread::current()), _queue(q), _dedup_queue(dq) { } ! template <class T, bool STRING_DEDUP, bool DEGEN> void work(T* p); }; class ShenandoahTraversalClosure : public ShenandoahTraversalSuperClosure { public: ShenandoahTraversalClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; } --- 210,255 ---- inline void do_oop_nv(T* p) { work<T, true>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } }; class ShenandoahTraversalSuperClosure : public MetadataAwareOopClosure { private: ShenandoahTraversalGC* _traversal_gc; Thread* _thread; ShenandoahObjToScanQueue* _queue; ShenandoahStrDedupQueue* _dedup_queue; ! oop _base_obj; protected: ShenandoahTraversalSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : MetadataAwareOopClosure(rp), _traversal_gc(ShenandoahHeap::heap()->traversal_gc()), ! _thread(Thread::current()), _queue(q), _dedup_queue(NULL), _base_obj(NULL) { } ShenandoahTraversalSuperClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : MetadataAwareOopClosure(rp), _traversal_gc(ShenandoahHeap::heap()->traversal_gc()), _thread(Thread::current()), _queue(q), _dedup_queue(dq) { } ! template <class T, bool STRING_DEDUP, bool DEGEN, bool MATRIX> void work(T* p); + + public: + inline void set_base_object(oop obj) { + _base_obj = obj; + } }; class ShenandoahTraversalClosure : public ShenandoahTraversalSuperClosure { public: ShenandoahTraversalClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, false, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; }
*** 270,280 **** public: ShenandoahTraversalMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; } --- 260,270 ---- public: ShenandoahTraversalMetadataClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, false, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; }
*** 285,295 **** public: ShenandoahTraversalDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; } --- 275,285 ---- public: ShenandoahTraversalDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, false, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; }
*** 300,310 **** public: ShenandoahTraversalMetadataDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; } --- 290,300 ---- public: ShenandoahTraversalMetadataDedupClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, false, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; }
*** 315,325 **** public: ShenandoahTraversalDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, true>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; } --- 305,315 ---- public: ShenandoahTraversalDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, true, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; }
*** 330,340 **** public: ShenandoahTraversalMetadataDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, true>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; } --- 320,330 ---- public: ShenandoahTraversalMetadataDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ShenandoahTraversalSuperClosure(q, rp) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, false, true, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; }
*** 345,355 **** public: ShenandoahTraversalDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, true>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; } --- 335,345 ---- public: ShenandoahTraversalDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, true, false>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return false; }
*** 360,370 **** public: ShenandoahTraversalMetadataDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, true>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; } --- 350,480 ---- public: ShenandoahTraversalMetadataDedupDegenClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ShenandoahTraversalSuperClosure(q, rp, dq) {} template <class T> ! inline void do_oop_nv(T* p) { work<T, true, true, false>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return true; } ! virtual bool do_metadata() { return true; } ! }; ! ! class ShenandoahTraversalMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ! ShenandoahTraversalSuperClosure(q, rp) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, false, false, true>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return false; } ! virtual bool do_metadata() { return false; } ! }; ! ! class ShenandoahTraversalMetadataMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalMetadataMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ! ShenandoahTraversalSuperClosure(q, rp) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, false, false, true>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return true; } ! virtual bool do_metadata() { return true; } ! }; ! ! class ShenandoahTraversalDedupMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalDedupMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ! ShenandoahTraversalSuperClosure(q, rp, dq) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, true, false, true>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return false; } ! virtual bool do_metadata() { return false; } ! }; ! ! class ShenandoahTraversalMetadataDedupMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalMetadataDedupMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ! ShenandoahTraversalSuperClosure(q, rp, dq) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, true, false, true>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return true; } ! virtual bool do_metadata() { return true; } ! }; ! ! class ShenandoahTraversalDegenMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalDegenMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ! ShenandoahTraversalSuperClosure(q, rp) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, false, true, true>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return false; } ! virtual bool do_metadata() { return false; } ! }; ! ! class ShenandoahTraversalMetadataDegenMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalMetadataDegenMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp) : ! ShenandoahTraversalSuperClosure(q, rp) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, false, true, true>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return true; } ! virtual bool do_metadata() { return true; } ! }; ! ! class ShenandoahTraversalDedupDegenMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalDedupDegenMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ! ShenandoahTraversalSuperClosure(q, rp, dq) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, true, true, true>(p); } ! ! virtual void do_oop(narrowOop* p) { do_oop_nv(p); } ! virtual void do_oop(oop* p) { do_oop_nv(p); } ! ! inline bool do_metadata_nv() { return false; } ! virtual bool do_metadata() { return false; } ! }; ! ! class ShenandoahTraversalMetadataDedupDegenMatrixClosure : public ShenandoahTraversalSuperClosure { ! public: ! ShenandoahTraversalMetadataDedupDegenMatrixClosure(ShenandoahObjToScanQueue* q, ReferenceProcessor* rp, ShenandoahStrDedupQueue* dq) : ! ShenandoahTraversalSuperClosure(q, rp, dq) {} ! ! template <class T> ! inline void do_oop_nv(T* p) { work<T, true, true, true>(p); } virtual void do_oop(narrowOop* p) { do_oop_nv(p); } virtual void do_oop(oop* p) { do_oop_nv(p); } inline bool do_metadata_nv() { return true; }
< prev index next >