--- old/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp 2013-09-06 14:11:04.432354396 +0200 +++ new/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp 2013-09-06 14:11:04.336352658 +0200 @@ -30,7 +30,8 @@ ConcurrentG1Refine::ConcurrentG1Refine(G1CollectedHeap* g1h) : _threads(NULL), _n_threads(0), - _hot_card_cache(g1h) + _hot_card_cache(g1h), + _safe_cards_for_refine(false) { // Ergomonically select initial concurrent refinement parameters if (FLAG_IS_DEFAULT(G1ConcRefinementGreenZone)) { @@ -66,6 +67,13 @@ _threads[i] = t; next = t; } + + _safe_cards_for_refine.initialize(DirtyCardQ_CBL_mon, + DirtyCardQ_FL_lock, + -1, + -1, + Shared_DirtyCardQ_lock, + &JavaThread::dirty_card_queue_set()); } void ConcurrentG1Refine::reset_threshold_step() { @@ -138,3 +146,11 @@ ConcurrentG1RefineThread * ConcurrentG1Refine::sampling_thread() const { return _threads[worker_thread_num()]; } + +void ConcurrentG1Refine::set_card_refinement_closure(CardTableEntryClosure* cl) { + _safe_cards_for_refine.set_closure(cl); +} + +void ConcurrentG1Refine::flush_cards_in_buffers() { + _flush_transfer_closure->do_void(); +}