src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp

changeset 1746
2a1472c30599
parent 1435
a1423fe86a18
child 1907
c18cbe5936b8
     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  //

mercurial