1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Wed Mar 03 08:10:41 2010 -0800 1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp Wed Mar 03 14:48:26 2010 -0800 1.3 @@ -48,7 +48,7 @@ 1.4 _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs); 1.5 1.6 // Do the real work 1.7 - cm->drain_marking_stacks(&mark_and_push_closure); 1.8 + cm->follow_marking_stacks(); 1.9 } 1.10 1.11 1.12 @@ -118,7 +118,7 @@ 1.13 } 1.14 1.15 // Do the real work 1.16 - cm->drain_marking_stacks(&mark_and_push_closure); 1.17 + cm->follow_marking_stacks(); 1.18 // cm->deallocate_stacks(); 1.19 } 1.20 1.21 @@ -196,17 +196,19 @@ 1.22 PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); 1.23 1.24 oop obj = NULL; 1.25 + ObjArrayTask task; 1.26 int random_seed = 17; 1.27 - while(true) { 1.28 - if (ParCompactionManager::steal(which, &random_seed, obj)) { 1.29 + do { 1.30 + while (ParCompactionManager::steal_objarray(which, &random_seed, task)) { 1.31 + objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint(); 1.32 + k->oop_follow_contents(cm, task.obj(), task.index()); 1.33 + cm->follow_marking_stacks(); 1.34 + } 1.35 + while (ParCompactionManager::steal(which, &random_seed, obj)) { 1.36 obj->follow_contents(cm); 1.37 - cm->drain_marking_stacks(&mark_and_push_closure); 1.38 - } else { 1.39 - if (terminator()->offer_termination()) { 1.40 - break; 1.41 - } 1.42 + cm->follow_marking_stacks(); 1.43 } 1.44 - } 1.45 + } while (!terminator()->offer_termination()); 1.46 } 1.47 1.48 //