hotspot/src/share/vm/memory/genMarkSweep.cpp
changeset 3908 24b55ad4c228
parent 1610 5dddd195cc86
child 3912 3aaaaad1ccb0
equal deleted inserted replaced
3906:6767b0c66883 3908:24b55ad4c228
   238   // are run.
   238   // are run.
   239   follow_root_closure.set_orig_generation(gch->get_gen(level));
   239   follow_root_closure.set_orig_generation(gch->get_gen(level));
   240 
   240 
   241   gch->gen_process_strong_roots(level,
   241   gch->gen_process_strong_roots(level,
   242                                 false, // Younger gens are not roots.
   242                                 false, // Younger gens are not roots.
       
   243                                 true,  // activate StrongRootsScope
   243                                 true,  // Collecting permanent generation.
   244                                 true,  // Collecting permanent generation.
   244                                 SharedHeap::SO_SystemClasses,
   245                                 SharedHeap::SO_SystemClasses,
   245                                 &follow_root_closure, &follow_root_closure);
   246                                 &follow_root_closure,
       
   247                                 true,   // walk code active on stacks
       
   248                                 &follow_root_closure);
   246 
   249 
   247   // Process reference objects found during marking
   250   // Process reference objects found during marking
   248   {
   251   {
   249     ref_processor()->setup_policy(clear_all_softrefs);
   252     ref_processor()->setup_policy(clear_all_softrefs);
   250     ref_processor()->process_discovered_references(
   253     ref_processor()->process_discovered_references(
   328   adjust_root_pointer_closure.set_orig_generation(gch->get_gen(level));
   331   adjust_root_pointer_closure.set_orig_generation(gch->get_gen(level));
   329   adjust_pointer_closure.set_orig_generation(gch->get_gen(level));
   332   adjust_pointer_closure.set_orig_generation(gch->get_gen(level));
   330 
   333 
   331   gch->gen_process_strong_roots(level,
   334   gch->gen_process_strong_roots(level,
   332                                 false, // Younger gens are not roots.
   335                                 false, // Younger gens are not roots.
       
   336                                 true,  // activate StrongRootsScope
   333                                 true,  // Collecting permanent generation.
   337                                 true,  // Collecting permanent generation.
   334                                 SharedHeap::SO_AllClasses,
   338                                 SharedHeap::SO_AllClasses,
   335                                 &adjust_root_pointer_closure,
   339                                 &adjust_root_pointer_closure,
       
   340                                 false, // do not walk code
   336                                 &adjust_root_pointer_closure);
   341                                 &adjust_root_pointer_closure);
   337 
   342 
   338   // Now adjust pointers in remaining weak roots.  (All of which should
   343   // Now adjust pointers in remaining weak roots.  (All of which should
   339   // have been cleared if they pointed to non-surviving objects.)
   344   // have been cleared if they pointed to non-surviving objects.)
       
   345   CodeBlobToOopClosure adjust_code_pointer_closure(&adjust_pointer_closure,
       
   346                                                    /*do_marking=*/ false);
   340   gch->gen_process_weak_roots(&adjust_root_pointer_closure,
   347   gch->gen_process_weak_roots(&adjust_root_pointer_closure,
       
   348                               &adjust_code_pointer_closure,
   341                               &adjust_pointer_closure);
   349                               &adjust_pointer_closure);
   342 
   350 
   343   adjust_marks();
   351   adjust_marks();
   344   GenAdjustPointersClosure blk;
   352   GenAdjustPointersClosure blk;
   345   gch->generation_iterate(&blk, true);
   353   gch->generation_iterate(&blk, true);