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

Print this page
rev 2652 : 7085906: Replace the permgen allocated sentinelRef with a self-looped end
Summary: Remove the sentinelRef and let the last Reference in a discovered chain point back to itself.
Reviewed-by: TBD1, TBD2


  38 #include "oops/oop.psgc.inline.hpp"
  39 #include "runtime/fprofiler.hpp"
  40 #include "runtime/thread.hpp"
  41 #include "runtime/vmThread.hpp"
  42 #include "services/management.hpp"
  43 #include "utilities/taskqueue.hpp"
  44 
  45 //
  46 // ScavengeRootsTask
  47 //
  48 
  49 void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
  50   assert(Universe::heap()->is_gc_active(), "called outside gc");
  51 
  52   PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which);
  53   PSScavengeRootsClosure roots_closure(pm);
  54 
  55   switch (_root_type) {
  56     case universe:
  57       Universe::oops_do(&roots_closure);
  58       ReferenceProcessor::oops_do(&roots_closure);
  59       break;
  60 
  61     case jni_handles:
  62       JNIHandles::oops_do(&roots_closure);
  63       break;
  64 
  65     case threads:
  66     {
  67       ResourceMark rm;
  68       Threads::oops_do(&roots_closure, NULL);
  69     }
  70     break;
  71 
  72     case object_synchronizer:
  73       ObjectSynchronizer::oops_do(&roots_closure);
  74       break;
  75 
  76     case flat_profiler:
  77       FlatProfiler::oops_do(&roots_closure);
  78       break;




  38 #include "oops/oop.psgc.inline.hpp"
  39 #include "runtime/fprofiler.hpp"
  40 #include "runtime/thread.hpp"
  41 #include "runtime/vmThread.hpp"
  42 #include "services/management.hpp"
  43 #include "utilities/taskqueue.hpp"
  44 
  45 //
  46 // ScavengeRootsTask
  47 //
  48 
  49 void ScavengeRootsTask::do_it(GCTaskManager* manager, uint which) {
  50   assert(Universe::heap()->is_gc_active(), "called outside gc");
  51 
  52   PSPromotionManager* pm = PSPromotionManager::gc_thread_promotion_manager(which);
  53   PSScavengeRootsClosure roots_closure(pm);
  54 
  55   switch (_root_type) {
  56     case universe:
  57       Universe::oops_do(&roots_closure);

  58       break;
  59 
  60     case jni_handles:
  61       JNIHandles::oops_do(&roots_closure);
  62       break;
  63 
  64     case threads:
  65     {
  66       ResourceMark rm;
  67       Threads::oops_do(&roots_closure, NULL);
  68     }
  69     break;
  70 
  71     case object_synchronizer:
  72       ObjectSynchronizer::oops_do(&roots_closure);
  73       break;
  74 
  75     case flat_profiler:
  76       FlatProfiler::oops_do(&roots_closure);
  77       break;