src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hsx-gc Sdiff src/share/vm/gc_implementation/parallelScavenge

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

Print this page




  35 #include "prims/jvmtiExport.hpp"
  36 #include "runtime/fprofiler.hpp"
  37 #include "runtime/jniHandles.hpp"
  38 #include "runtime/thread.hpp"
  39 #include "runtime/vmThread.hpp"
  40 #include "services/management.hpp"
  41 
  42 //
  43 // ThreadRootsMarkingTask
  44 //
  45 
  46 void ThreadRootsMarkingTask::do_it(GCTaskManager* manager, uint which) {
  47   assert(Universe::heap()->is_gc_active(), "called outside gc");
  48 
  49   ResourceMark rm;
  50 
  51   NOT_PRODUCT(TraceTime tm("ThreadRootsMarkingTask",
  52     PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
  53   ParCompactionManager* cm =
  54     ParCompactionManager::gc_thread_compaction_manager(which);

  55   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);

  56   CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true);
  57 
  58   if (_java_thread != NULL)
  59     _java_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);



  60 
  61   if (_vm_thread != NULL)
  62     _vm_thread->oops_do(&mark_and_push_closure, &mark_and_push_in_blobs);



  63 
  64   // Do the real work
  65   cm->follow_marking_stacks();
  66 }
  67 
  68 
  69 void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) {
  70   assert(Universe::heap()->is_gc_active(), "called outside gc");
  71 
  72   NOT_PRODUCT(TraceTime tm("MarkFromRootsTask",
  73     PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
  74   ParCompactionManager* cm =
  75     ParCompactionManager::gc_thread_compaction_manager(which);
  76   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
  77   PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure);
  78 
  79   switch (_root_type) {
  80     case universe:
  81       Universe::oops_do(&mark_and_push_closure);
  82       break;
  83 
  84     case jni_handles:
  85       JNIHandles::oops_do(&mark_and_push_closure);
  86       break;
  87 
  88     case threads:
  89     {
  90       ResourceMark rm;
  91       CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true);
  92       Threads::oops_do(&mark_and_push_closure, &each_active_code_blob);

  93     }
  94     break;
  95 
  96     case object_synchronizer:
  97       ObjectSynchronizer::oops_do(&mark_and_push_closure);
  98       break;
  99 
 100     case flat_profiler:
 101       FlatProfiler::oops_do(&mark_and_push_closure);
 102       break;
 103 
 104     case management:
 105       Management::oops_do(&mark_and_push_closure);
 106       break;
 107 
 108     case jvmti:
 109       JvmtiExport::oops_do(&mark_and_push_closure);
 110       break;
 111 
 112     case system_dictionary:




  35 #include "prims/jvmtiExport.hpp"
  36 #include "runtime/fprofiler.hpp"
  37 #include "runtime/jniHandles.hpp"
  38 #include "runtime/thread.hpp"
  39 #include "runtime/vmThread.hpp"
  40 #include "services/management.hpp"
  41 
  42 //
  43 // ThreadRootsMarkingTask
  44 //
  45 
  46 void ThreadRootsMarkingTask::do_it(GCTaskManager* manager, uint which) {
  47   assert(Universe::heap()->is_gc_active(), "called outside gc");
  48 
  49   ResourceMark rm;
  50 
  51   NOT_PRODUCT(TraceTime tm("ThreadRootsMarkingTask",
  52     PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
  53   ParCompactionManager* cm =
  54     ParCompactionManager::gc_thread_compaction_manager(which);
  55 
  56   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
  57   CLDToOopClosure mark_and_push_from_clds(&mark_and_push_closure, true);
  58   CodeBlobToOopClosure mark_and_push_in_blobs(&mark_and_push_closure, /*do_marking=*/ true);
  59 
  60   if (_java_thread != NULL)
  61     _java_thread->oops_do(
  62                 &mark_and_push_closure,
  63                 &mark_and_push_from_clds,
  64                 &mark_and_push_in_blobs);
  65 
  66   if (_vm_thread != NULL)
  67     _vm_thread->oops_do(
  68                 &mark_and_push_closure,
  69                 &mark_and_push_from_clds,
  70                 &mark_and_push_in_blobs);
  71 
  72   // Do the real work
  73   cm->follow_marking_stacks();
  74 }
  75 
  76 
  77 void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) {
  78   assert(Universe::heap()->is_gc_active(), "called outside gc");
  79 
  80   NOT_PRODUCT(TraceTime tm("MarkFromRootsTask",
  81     PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty));
  82   ParCompactionManager* cm =
  83     ParCompactionManager::gc_thread_compaction_manager(which);
  84   PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm);
  85   PSParallelCompact::FollowKlassClosure follow_klass_closure(&mark_and_push_closure);
  86 
  87   switch (_root_type) {
  88     case universe:
  89       Universe::oops_do(&mark_and_push_closure);
  90       break;
  91 
  92     case jni_handles:
  93       JNIHandles::oops_do(&mark_and_push_closure);
  94       break;
  95 
  96     case threads:
  97     {
  98       ResourceMark rm;
  99       CodeBlobToOopClosure each_active_code_blob(&mark_and_push_closure, /*do_marking=*/ true);
 100       CLDToOopClosure mark_and_push_from_cld(&mark_and_push_closure);
 101       Threads::oops_do(&mark_and_push_closure, &mark_and_push_from_cld, &each_active_code_blob);
 102     }
 103     break;
 104 
 105     case object_synchronizer:
 106       ObjectSynchronizer::oops_do(&mark_and_push_closure);
 107       break;
 108 
 109     case flat_profiler:
 110       FlatProfiler::oops_do(&mark_and_push_closure);
 111       break;
 112 
 113     case management:
 114       Management::oops_do(&mark_and_push_closure);
 115       break;
 116 
 117     case jvmti:
 118       JvmtiExport::oops_do(&mark_and_push_closure);
 119       break;
 120 
 121     case system_dictionary:


src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File