--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Wed Mar 03 08:10:41 2010 -0800
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Wed Mar 03 14:48:26 2010 -0800
@@ -48,7 +48,7 @@
_vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);
// Do the real work
- cm->drain_marking_stacks(&mark_and_push_closure);
+ cm->follow_marking_stacks();
}
@@ -118,7 +118,7 @@
}
// Do the real work
- cm->drain_marking_stacks(&mark_and_push_closure);
+ cm->follow_marking_stacks();
// cm->deallocate_stacks();
}
@@ -196,17 +196,19 @@
PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
oop obj = NULL;
+ ObjArrayTask task;
int random_seed = 17;
- while(true) {
- if (ParCompactionManager::steal(which, &random_seed, obj)) {
+ do {
+ while (ParCompactionManager::steal_objarray(which, &random_seed, task)) {
+ objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint();
+ k->oop_follow_contents(cm, task.obj(), task.index());
+ cm->follow_marking_stacks();
+ }
+ while (ParCompactionManager::steal(which, &random_seed, obj)) {
obj->follow_contents(cm);
- cm->drain_marking_stacks(&mark_and_push_closure);
- } else {
- if (terminator()->offer_termination()) {
- break;
- }
+ cm->follow_marking_stacks();
}
- }
+ } while (!terminator()->offer_termination());
}
//