--- old/src/share/vm/gc/g1/g1CollectedHeap.cpp 2017-07-12 12:13:41.199569778 +0200 +++ new/src/share/vm/gc/g1/g1CollectedHeap.cpp 2017-07-12 12:13:41.100566709 +0200 @@ -1639,7 +1639,7 @@ jint G1CollectedHeap::initialize_concurrent_refinement() { jint ecode = JNI_OK; - _cg1r = ConcurrentG1Refine::create(_g1_rem_set->refine_card_concurrently_closure(), &ecode); + _cg1r = ConcurrentG1Refine::create(&ecode); return ecode; } @@ -1796,8 +1796,7 @@ return ecode; } - JavaThread::dirty_card_queue_set().initialize(_g1_rem_set->refine_card_concurrently_closure(), - DirtyCardQ_CBL_mon, + JavaThread::dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon, DirtyCardQ_FL_lock, (int)concurrent_g1_refine()->yellow_zone(), (int)concurrent_g1_refine()->red_zone(), @@ -1805,8 +1804,7 @@ NULL, // fl_owner true); // init_free_ids - dirty_card_queue_set().initialize(NULL, // Should never be called by the Java code - DirtyCardQ_CBL_mon, + dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon, DirtyCardQ_FL_lock, -1, // never trigger processing -1, // no limit on length @@ -1983,7 +1981,7 @@ void G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure* cl, uint worker_i) { DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); size_t n_completed_buffers = 0; - while (dcqs.apply_closure_to_completed_buffer(cl, worker_i, 0, true)) { + while (dcqs.apply_closure_during_gc(cl, worker_i)) { n_completed_buffers++; } g1_policy()->phase_times()->record_thread_work_item(G1GCPhaseTimes::UpdateRS, worker_i, n_completed_buffers);