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