8309960: ParallelGC young collections very slow in DelayInducer
Reviewed-by: tschatzl, iwalulya
This commit is contained in:
parent
83d92672d4
commit
5f3613e060
@ -237,9 +237,14 @@ void PSPromotionManager::drain_stacks_depth(bool totally_drain) {
|
|||||||
// Drain overflow stack first, so other threads can steal from
|
// Drain overflow stack first, so other threads can steal from
|
||||||
// claimed stack while we work.
|
// claimed stack while we work.
|
||||||
while (tq->pop_overflow(task)) {
|
while (tq->pop_overflow(task)) {
|
||||||
if (!tq->try_push_to_taskqueue(task)) {
|
// In PSCardTable::scavenge_contents_parallel(), when work is distributed
|
||||||
process_popped_location_depth(task);
|
// among different workers, an object is never split between multiple workers.
|
||||||
}
|
// Therefore, if a worker gets owned a large objArray, it may accumulate
|
||||||
|
// many tasks (corresponding to every element in this array) in its
|
||||||
|
// task queue. When there are too many overflow tasks, publishing them
|
||||||
|
// (via try_push_to_taskqueue()) can incur noticeable overhead in Young GC
|
||||||
|
// pause, so it is better to process them locally until large-objArray-splitting is implemented.
|
||||||
|
process_popped_location_depth(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (tq->pop_local(task, threshold)) {
|
while (tq->pop_local(task, threshold)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user