--- old/src/share/vm/gc/g1/g1CollectedHeap.cpp 2017-07-12 11:58:59.648236381 +0200 +++ new/src/share/vm/gc/g1/g1CollectedHeap.cpp 2017-07-12 11:58:59.546233218 +0200 @@ -95,28 +95,6 @@ // apply to TLAB allocation, which is not part of this interface: it // is done by clients of this interface.) -// Local to this file. - -class RefineCardTableEntryClosure: public CardTableEntryClosure { - bool _concurrent; -public: - RefineCardTableEntryClosure() : _concurrent(true) { } - - bool do_card_ptr(jbyte* card_ptr, uint worker_i) { - G1CollectedHeap::heap()->g1_rem_set()->refine_card_concurrently(card_ptr, worker_i); - - if (_concurrent && SuspendibleThreadSet::should_yield()) { - // Caller will actually yield. - return false; - } - // Otherwise, we finished successfully; return true. - return true; - } - - void set_concurrent(bool b) { _concurrent = b; } -}; - - class RedirtyLoggedCardTableEntryClosure : public CardTableEntryClosure { private: size_t _num_dirtied; @@ -1582,7 +1560,6 @@ _g1_rem_set(NULL), _cg1r(NULL), _g1mm(NULL), - _refine_cte_cl(NULL), _preserved_marks_set(true /* in_c_heap */), _secondary_free_list("Secondary Free List", new SecondaryFreeRegionListMtSafeChecker()), _old_set("Old Set", false /* humongous */, new OldRegionSetMtSafeChecker()), @@ -1661,10 +1638,8 @@ } jint G1CollectedHeap::initialize_concurrent_refinement() { - _refine_cte_cl = new RefineCardTableEntryClosure(); - jint ecode = JNI_OK; - _cg1r = ConcurrentG1Refine::create(_refine_cte_cl, &ecode); + _cg1r = ConcurrentG1Refine::create(&ecode); return ecode; } @@ -1821,8 +1796,7 @@ return ecode; } - JavaThread::dirty_card_queue_set().initialize(_refine_cte_cl, - 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(), @@ -1830,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 @@ -2008,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); @@ -5167,10 +5140,6 @@ used_unlocked(), recalculate_used()); } -void G1CollectedHeap::set_refine_cte_cl_concurrency(bool concurrent) { - _refine_cte_cl->set_concurrent(concurrent); -} - bool G1CollectedHeap::is_in_closed_subset(const void* p) const { HeapRegion* hr = heap_region_containing(p); return hr->is_in(p);