提交 81554d51 编写于 作者: J jcoomes

6935839: excessive marking stack growth during full gcs

Summary: process one item at a time from the objarray stack/queue
Reviewed-by: apetrusenko, tonyp
上级 7e51bc98
......@@ -217,21 +217,21 @@ void ParCompactionManager::reset() {
void ParCompactionManager::follow_marking_stacks() {
do {
// Drain the overflow stack first, to allow stealing from the marking stack.
oop obj;
while (!overflow_stack()->is_empty()) {
overflow_stack()->pop()->follow_contents(this);
}
oop obj;
while (marking_stack()->pop_local(obj)) {
obj->follow_contents(this);
}
// Process ObjArrays one at a time to avoid marking stack bloat.
ObjArrayTask task;
while (!_objarray_overflow_stack->is_empty()) {
if (!_objarray_overflow_stack->is_empty()) {
task = _objarray_overflow_stack->pop();
objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint();
k->oop_follow_contents(this, task.obj(), task.index());
}
while (_objarray_queue.pop_local(task)) {
} else if (_objarray_queue.pop_local(task)) {
objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint();
k->oop_follow_contents(this, task.obj(), task.index());
}
......
......@@ -111,7 +111,8 @@ void MarkSweep::follow_stack() {
assert (obj->is_gc_marked(), "p must be marked");
obj->follow_contents();
}
while (!_objarray_stack->is_empty()) {
// Process ObjArrays one at a time to avoid marking stack bloat.
if (!_objarray_stack->is_empty()) {
ObjArrayTask task = _objarray_stack->pop();
objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint();
k->oop_follow_contents(task.obj(), task.index());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册