< prev index next >
src/share/vm/gc/shenandoah/shenandoahOopClosures.hpp
Print this page
rev 13130 : Interleave partial GCs with concurrent GCs.
*** 28,38 ****
typedef BufferedOverflowTaskQueue<ObjArrayChunkedTask, mtGC> ShenandoahBufferedOverflowTaskQueue;
typedef Padded<ShenandoahBufferedOverflowTaskQueue> SCMObjToScanQueue;
class ShenandoahHeap;
- class ShenandoahConnectionMatrix;
enum UpdateRefsMode {
NONE, // No reference updating
RESOLVE, // Only a read-barrier (no reference updating)
SIMPLE, // Reference updating using simple store
--- 28,37 ----
*** 41,65 ****
class ShenandoahMarkRefsSuperClosure : public MetadataAwareOopClosure {
private:
SCMObjToScanQueue* _queue;
ShenandoahHeap* _heap;
- ShenandoahConnectionMatrix* _conn_matrix;
public:
ShenandoahMarkRefsSuperClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp);
! template <class T, UpdateRefsMode UPDATE_MODE, bool UPDATE_MATRIX>
void work(T *p);
};
class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
public:
ShenandoahMarkUpdateRefsClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, CONCURRENT, 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; }
virtual bool do_metadata() { return false; }
};
--- 40,63 ----
class ShenandoahMarkRefsSuperClosure : public MetadataAwareOopClosure {
private:
SCMObjToScanQueue* _queue;
ShenandoahHeap* _heap;
public:
ShenandoahMarkRefsSuperClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp);
! template <class T, UpdateRefsMode UPDATE_MODE>
void work(T *p);
};
class ShenandoahMarkUpdateRefsClosure : public ShenandoahMarkRefsSuperClosure {
public:
ShenandoahMarkUpdateRefsClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, CONCURRENT>(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; }
};
*** 68,78 ****
public:
ShenandoahMarkUpdateRefsMetadataClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, CONCURRENT, 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; }
};
--- 66,76 ----
public:
ShenandoahMarkUpdateRefsMetadataClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, CONCURRENT>(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; }
};
*** 81,91 ****
public:
ShenandoahMarkRefsClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, NONE, 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; }
virtual bool do_metadata() { return false; }
};
--- 79,89 ----
public:
ShenandoahMarkRefsClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, NONE>(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; }
};
*** 94,104 ****
public:
ShenandoahMarkResolveRefsClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, RESOLVE, 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; }
virtual bool do_metadata() { return false; }
};
--- 92,102 ----
public:
ShenandoahMarkResolveRefsClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, RESOLVE>(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; }
};
*** 107,169 ****
public:
ShenandoahMarkRefsMetadataClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, NONE, 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 ShenandoahMarkUpdateRefsMatrixClosure : public ShenandoahMarkRefsSuperClosure {
! public:
! ShenandoahMarkUpdateRefsMatrixClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
! ShenandoahMarkRefsSuperClosure(q, rp) {};
!
! template <class T>
! inline void do_oop_nv(T* p) { work<T, CONCURRENT, 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 ShenandoahMarkUpdateRefsMetadataMatrixClosure : public ShenandoahMarkRefsSuperClosure {
! public:
! ShenandoahMarkUpdateRefsMetadataMatrixClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
! ShenandoahMarkRefsSuperClosure(q, rp) {};
!
! template <class T>
! inline void do_oop_nv(T* p) { work<T, CONCURRENT, 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 ShenandoahMarkRefsMatrixClosure : public ShenandoahMarkRefsSuperClosure {
! public:
! ShenandoahMarkRefsMatrixClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
! ShenandoahMarkRefsSuperClosure(q, rp) {};
!
! template <class T>
! inline void do_oop_nv(T* p) { work<T, NONE, 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 ShenandoahMarkRefsMetadataMatrixClosure : public ShenandoahMarkRefsSuperClosure {
! public:
! ShenandoahMarkRefsMetadataMatrixClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
! ShenandoahMarkRefsSuperClosure(q, rp) {};
!
! template <class T>
! inline void do_oop_nv(T* p) { work<T, NONE, 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; }
};
--- 105,115 ----
public:
ShenandoahMarkRefsMetadataClosure(SCMObjToScanQueue* q, ReferenceProcessor* rp) :
ShenandoahMarkRefsSuperClosure(q, rp) {};
template <class T>
! inline void do_oop_nv(T* p) { work<T, NONE>(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; }
};
< prev index next >