mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 11:34:38 +02:00
6862387: tune concurrent refinement further
Reworked the concurrent refinement: threads activation, feedback-based threshold adjustment, other miscellaneous fixes. Reviewed-by: apetrusenko, tonyp
This commit is contained in:
parent
1bed5a3ded
commit
1383dc414b
16 changed files with 509 additions and 307 deletions
|
@ -67,9 +67,9 @@ SATBMarkQueueSet::SATBMarkQueueSet() :
|
|||
{}
|
||||
|
||||
void SATBMarkQueueSet::initialize(Monitor* cbl_mon, Mutex* fl_lock,
|
||||
int max_completed_queue,
|
||||
int process_completed_threshold,
|
||||
Mutex* lock) {
|
||||
PtrQueueSet::initialize(cbl_mon, fl_lock, max_completed_queue);
|
||||
PtrQueueSet::initialize(cbl_mon, fl_lock, process_completed_threshold, -1);
|
||||
_shared_satb_queue.set_lock(lock);
|
||||
if (ParallelGCThreads > 0) {
|
||||
_par_closures = NEW_C_HEAP_ARRAY(ObjectClosure*, ParallelGCThreads);
|
||||
|
@ -122,12 +122,12 @@ void SATBMarkQueueSet::par_iterate_closure_all_threads(int worker) {
|
|||
|
||||
bool SATBMarkQueueSet::apply_closure_to_completed_buffer_work(bool par,
|
||||
int worker) {
|
||||
CompletedBufferNode* nd = NULL;
|
||||
BufferNode* nd = NULL;
|
||||
{
|
||||
MutexLockerEx x(_cbl_mon, Mutex::_no_safepoint_check_flag);
|
||||
if (_completed_buffers_head != NULL) {
|
||||
nd = _completed_buffers_head;
|
||||
_completed_buffers_head = nd->next;
|
||||
_completed_buffers_head = nd->next();
|
||||
if (_completed_buffers_head == NULL) _completed_buffers_tail = NULL;
|
||||
_n_completed_buffers--;
|
||||
if (_n_completed_buffers == 0) _process_completed = false;
|
||||
|
@ -135,9 +135,9 @@ bool SATBMarkQueueSet::apply_closure_to_completed_buffer_work(bool par,
|
|||
}
|
||||
ObjectClosure* cl = (par ? _par_closures[worker] : _closure);
|
||||
if (nd != NULL) {
|
||||
ObjPtrQueue::apply_closure_to_buffer(cl, nd->buf, 0, _sz);
|
||||
deallocate_buffer(nd->buf);
|
||||
delete nd;
|
||||
void **buf = BufferNode::make_buffer_from_node(nd);
|
||||
ObjPtrQueue::apply_closure_to_buffer(cl, buf, 0, _sz);
|
||||
deallocate_buffer(buf);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
@ -145,13 +145,13 @@ bool SATBMarkQueueSet::apply_closure_to_completed_buffer_work(bool par,
|
|||
}
|
||||
|
||||
void SATBMarkQueueSet::abandon_partial_marking() {
|
||||
CompletedBufferNode* buffers_to_delete = NULL;
|
||||
BufferNode* buffers_to_delete = NULL;
|
||||
{
|
||||
MutexLockerEx x(_cbl_mon, Mutex::_no_safepoint_check_flag);
|
||||
while (_completed_buffers_head != NULL) {
|
||||
CompletedBufferNode* nd = _completed_buffers_head;
|
||||
_completed_buffers_head = nd->next;
|
||||
nd->next = buffers_to_delete;
|
||||
BufferNode* nd = _completed_buffers_head;
|
||||
_completed_buffers_head = nd->next();
|
||||
nd->set_next(buffers_to_delete);
|
||||
buffers_to_delete = nd;
|
||||
}
|
||||
_completed_buffers_tail = NULL;
|
||||
|
@ -159,10 +159,9 @@ void SATBMarkQueueSet::abandon_partial_marking() {
|
|||
DEBUG_ONLY(assert_completed_buffer_list_len_correct_locked());
|
||||
}
|
||||
while (buffers_to_delete != NULL) {
|
||||
CompletedBufferNode* nd = buffers_to_delete;
|
||||
buffers_to_delete = nd->next;
|
||||
deallocate_buffer(nd->buf);
|
||||
delete nd;
|
||||
BufferNode* nd = buffers_to_delete;
|
||||
buffers_to_delete = nd->next();
|
||||
deallocate_buffer(BufferNode::make_buffer_from_node(nd));
|
||||
}
|
||||
assert(SafepointSynchronize::is_at_safepoint(), "Must be at safepoint.");
|
||||
// So we can safely manipulate these queues.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue