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;
|