< prev index next >
src/share/vm/gc/shenandoah/shenandoahConcurrentMark.hpp
Print this page
rev 13055 : Implement barriers for maintaining connection matrix.
@@ -82,48 +82,57 @@
// Actual mark loop with closures set up
template <class T, bool CANCELLABLE, bool DRAIN_SATB, bool COUNT_LIVENESS>
void mark_loop_work(T* cl, jushort* live_data, uint worker_id, ParallelTaskTerminator *t);
- template <bool CANCELLABLE, bool DRAIN_SATB, bool COUNT_LIVENESS, bool CLASS_UNLOAD, bool UPDATE_REFS>
+ template <bool CANCELLABLE, bool DRAIN_SATB, bool COUNT_LIVENESS, bool CLASS_UNLOAD, bool UPDATE_REFS, bool UPDATE_MATRIX>
void mark_loop_prework(uint worker_id, ParallelTaskTerminator *terminator, ReferenceProcessor *rp);
// ------------------------ Currying dynamic arguments to template args ----------------------------
+ template <bool B1, bool B2, bool B3, bool B4, bool B5>
+ void mark_loop_5(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b6) {
+ if (b6) {
+ mark_loop_prework<B1, B2, B3, B4, B5, true>(w, t, rp);
+ } else {
+ mark_loop_prework<B1, B2, B3, B4, B5, false>(w, t, rp);
+ }
+ };
+
template <bool B1, bool B2, bool B3, bool B4>
- void mark_loop_4(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b5) {
+ void mark_loop_4(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b5, bool b6) {
if (b5) {
- mark_loop_prework<B1, B2, B3, B4, true>(w, t, rp);
+ mark_loop_5<B1, B2, B3, B4, true>(w, t, rp, b6);
} else {
- mark_loop_prework<B1, B2, B3, B4, false>(w, t, rp);
+ mark_loop_5<B1, B2, B3, B4, false>(w, t, rp, b6);
}
};
template <bool B1, bool B2, bool B3>
- void mark_loop_3(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b4, bool b5) {
+ void mark_loop_3(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b4, bool b5, bool b6) {
if (b4) {
- mark_loop_4<B1, B2, B3, true>(w, t, rp, b5);
+ mark_loop_4<B1, B2, B3, true>(w, t, rp, b5, b6);
} else {
- mark_loop_4<B1, B2, B3, false>(w, t, rp, b5);
+ mark_loop_4<B1, B2, B3, false>(w, t, rp, b5, b6);
}
};
template <bool B1, bool B2>
- void mark_loop_2(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b3, bool b4, bool b5) {
+ void mark_loop_2(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b3, bool b4, bool b5, bool b6) {
if (b3) {
- mark_loop_3<B1, B2, true>(w, t, rp, b4, b5);
+ mark_loop_3<B1, B2, true>(w, t, rp, b4, b5, b6);
} else {
- mark_loop_3<B1, B2, false>(w, t, rp, b4, b5);
+ mark_loop_3<B1, B2, false>(w, t, rp, b4, b5, b6);
}
};
template <bool B1>
- void mark_loop_1(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b2, bool b3, bool b4, bool b5) {
+ void mark_loop_1(uint w, ParallelTaskTerminator* t, ReferenceProcessor* rp, bool b2, bool b3, bool b4, bool b5, bool b6) {
if (b2) {
- mark_loop_2<B1, true>(w, t, rp, b3, b4, b5);
+ mark_loop_2<B1, true>(w, t, rp, b3, b4, b5, b6);
} else {
- mark_loop_2<B1, false>(w, t, rp, b3, b4, b5);
+ mark_loop_2<B1, false>(w, t, rp, b3, b4, b5, b6);
}
};
// ------------------------ END: Currying dynamic arguments to template args ----------------------------
@@ -138,12 +147,12 @@
bool unload_classes() const;
bool claim_codecache();
void clear_claim_codecache();
- template<class T, UpdateRefsMode UPDATE_REFS>
- static inline void mark_through_ref(T* p, ShenandoahHeap* heap, SCMObjToScanQueue* q);
+ template<class T, UpdateRefsMode UPDATE_REFS, bool UPDATE_MATRIX>
+ static inline void mark_through_ref(T* p, ShenandoahHeap* heap, SCMObjToScanQueue* q, ShenandoahConnectionMatrix* conn_matrix);
void mark_from_roots();
// Prepares unmarked root objects by marking them and putting
// them into the marking task queue.
@@ -157,15 +166,16 @@
// Those are only needed public because they're called from closures.
// Mark loop entry.
// Translates dynamic arguments to template parameters with progressive currying.
void mark_loop(uint worker_id, ParallelTaskTerminator* terminator, ReferenceProcessor *rp,
- bool cancellable, bool drain_satb, bool count_liveness, bool class_unload, bool update_refs) {
+ bool cancellable, bool drain_satb, bool count_liveness, bool class_unload,
+ bool update_refs, bool update_matrix) {
if (cancellable) {
- mark_loop_1<true>(worker_id, terminator, rp, drain_satb, count_liveness, class_unload, update_refs);
+ mark_loop_1<true>(worker_id, terminator, rp, drain_satb, count_liveness, class_unload, update_refs, update_matrix);
} else {
- mark_loop_1<false>(worker_id, terminator, rp, drain_satb, count_liveness, class_unload, update_refs);
+ mark_loop_1<false>(worker_id, terminator, rp, drain_satb, count_liveness, class_unload, update_refs, update_matrix);
}
}
inline bool try_queue(SCMObjToScanQueue* q, SCMTask &task);
< prev index next >