src/share/vm/gc_implementation/g1/concurrentG1RefineThread.cpp

Print this page
rev 6327 : 8019342: G1: High "Other" time most likely due to card redirtying
Summary: Parallelize card redirtying to decrease the time it takes.
Reviewed-by: brutisso

*** 31,42 **** --- 31,44 ---- #include "runtime/handles.inline.hpp" #include "runtime/mutexLocker.hpp" ConcurrentG1RefineThread:: ConcurrentG1RefineThread(ConcurrentG1Refine* cg1r, ConcurrentG1RefineThread *next, + CardTableEntryClosure* refine_closure, uint worker_id_offset, uint worker_id) : ConcurrentGCThread(), + _refine_closure(refine_closure), _worker_id_offset(worker_id_offset), _worker_id(worker_id), _active(false), _next(next), _monitor(NULL),
*** 202,212 **** // Check if we need to activate the next thread. if (_next != NULL && !_next->is_active() && curr_buffer_num > _next->_threshold) { _next->activate(); } ! } while (dcqs.apply_closure_to_completed_buffer(_worker_id + _worker_id_offset, cg1r()->green_zone())); // We can exit the loop above while being active if there was a yield request. if (is_active()) { deactivate(); } --- 204,214 ---- // Check if we need to activate the next thread. if (_next != NULL && !_next->is_active() && curr_buffer_num > _next->_threshold) { _next->activate(); } ! } while (dcqs.apply_closure_to_completed_buffer(_refine_closure, _worker_id + _worker_id_offset, cg1r()->green_zone())); // We can exit the loop above while being active if there was a yield request. if (is_active()) { deactivate(); }