55 SHENANDOAH_RP_PS_JNIHandles_oops_do,
56 SHENANDOAH_RP_PS_JNIHandles_weak_oops_do,
57 SHENANDOAH_RP_PS_ObjectSynchronizer_oops_do,
58 SHENANDOAH_RP_PS_FlatProfiler_oops_do,
59 SHENANDOAH_RP_PS_Management_oops_do,
60 SHENANDOAH_RP_PS_SystemDictionary_oops_do,
61 SHENANDOAH_RP_PS_ClassLoaderDataGraph_oops_do,
62 SHENANDOAH_RP_PS_jvmti_oops_do,
63 SHENANDOAH_RP_PS_CodeCache_oops_do,
64 // Leave this one last.
65 SHENANDOAH_RP_PS_NumElements
66 };
67
68 class ShenandoahRootProcessor : public StackObj {
69 SubTasksDone* _process_strong_tasks;
70 StrongRootsScope _srs;
71 ShenandoahCollectorPolicy::TimingPhase _phase;
72 ParallelCLDRootIterator _cld_iterator;
73 ParallelCodeCacheIterator _codecache_iterator;
74 ParallelObjectSynchronizerIterator _om_iterator;
75
76 void process_java_roots(OopClosure* scan_non_heap_roots,
77 CLDClosure* scan_strong_clds,
78 CLDClosure* scan_weak_clds,
79 CodeBlobClosure* scan_strong_code,
80 uint worker_i);
81
82 void process_vm_roots(OopClosure* scan_non_heap_roots,
83 OopClosure* scan_non_heap_weak_roots,
84 OopClosure* weak_jni_roots,
85 uint worker_i);
86
87 public:
88 ShenandoahRootProcessor(ShenandoahHeap* heap, uint n_workers,
89 ShenandoahCollectorPolicy::TimingPhase phase = ShenandoahCollectorPolicy::_num_phases);
90 ~ShenandoahRootProcessor();
91
92 // Apply oops, clds and blobs to all strongly reachable roots in the system
93 void process_strong_roots(OopClosure* oops, OopClosure* weak_oops,
94 CLDClosure* clds,
95 CodeBlobClosure* blobs,
96 uint worker_id);
97
98 // Apply oops, clds and blobs to strongly and weakly reachable roots in the system
99 void process_all_roots(OopClosure* oops, OopClosure* weak_oops,
100 CLDClosure* clds,
101 CodeBlobClosure* blobs,
102 uint worker_id);
103
104 // Number of worker threads used by the root processor.
105 uint n_workers() const;
106 };
107
108 class ShenandoahRootEvacuator : public StackObj {
109 SubTasksDone* _process_strong_tasks;
110 StrongRootsScope _srs;
111 ShenandoahCollectorPolicy::TimingPhase _phase;
112 ParallelCodeCacheIterator _codecache_iterator;
113
114 public:
115 ShenandoahRootEvacuator(ShenandoahHeap* heap, uint n_workers,
116 ShenandoahCollectorPolicy::TimingPhase phase = ShenandoahCollectorPolicy::_num_phases);
117 ~ShenandoahRootEvacuator();
118
119 void process_evacuate_roots(OopClosure* oops,
120 CodeBlobClosure* blobs,
121 uint worker_id);
122
123 // Number of worker threads used by the root processor.
124 uint n_workers() const;
125 };
126 #endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_HPP
|
55 SHENANDOAH_RP_PS_JNIHandles_oops_do,
56 SHENANDOAH_RP_PS_JNIHandles_weak_oops_do,
57 SHENANDOAH_RP_PS_ObjectSynchronizer_oops_do,
58 SHENANDOAH_RP_PS_FlatProfiler_oops_do,
59 SHENANDOAH_RP_PS_Management_oops_do,
60 SHENANDOAH_RP_PS_SystemDictionary_oops_do,
61 SHENANDOAH_RP_PS_ClassLoaderDataGraph_oops_do,
62 SHENANDOAH_RP_PS_jvmti_oops_do,
63 SHENANDOAH_RP_PS_CodeCache_oops_do,
64 // Leave this one last.
65 SHENANDOAH_RP_PS_NumElements
66 };
67
68 class ShenandoahRootProcessor : public StackObj {
69 SubTasksDone* _process_strong_tasks;
70 StrongRootsScope _srs;
71 ShenandoahCollectorPolicy::TimingPhase _phase;
72 ParallelCLDRootIterator _cld_iterator;
73 ParallelCodeCacheIterator _codecache_iterator;
74 ParallelObjectSynchronizerIterator _om_iterator;
75 CodeBlobClosure* _threads_nmethods_cl;
76
77 void process_java_roots(OopClosure* scan_non_heap_roots,
78 CLDClosure* scan_strong_clds,
79 CLDClosure* scan_weak_clds,
80 CodeBlobClosure* scan_strong_code,
81 CodeBlobClosure* nmethods_cl,
82 uint worker_i);
83
84 void process_vm_roots(OopClosure* scan_non_heap_roots,
85 OopClosure* scan_non_heap_weak_roots,
86 OopClosure* weak_jni_roots,
87 uint worker_i);
88
89 public:
90 ShenandoahRootProcessor(ShenandoahHeap* heap, uint n_workers,
91 ShenandoahCollectorPolicy::TimingPhase phase = ShenandoahCollectorPolicy::_num_phases);
92 ~ShenandoahRootProcessor();
93
94 // Apply oops, clds and blobs to all strongly reachable roots in the system
95 void process_strong_roots(OopClosure* oops, OopClosure* weak_oops,
96 CLDClosure* clds,
97 CodeBlobClosure* blobs,
98 uint worker_id);
99
100 // Apply oops, clds and blobs to strongly and weakly reachable roots in the system
101 void process_all_roots(OopClosure* oops, OopClosure* weak_oops,
102 CLDClosure* clds,
103 CodeBlobClosure* blobs,
104 uint worker_id);
105
106 // Number of worker threads used by the root processor.
107 uint n_workers() const;
108 };
109
110 class ShenandoahRootEvacuator : public StackObj {
111 SubTasksDone* _process_strong_tasks;
112 StrongRootsScope _srs;
113 ShenandoahCollectorPolicy::TimingPhase _phase;
114 ParallelCodeCacheIterator _codecache_iterator;
115 CodeBlobClosure* _threads_nmethods_cl;
116
117 public:
118 ShenandoahRootEvacuator(ShenandoahHeap* heap, uint n_workers,
119 ShenandoahCollectorPolicy::TimingPhase phase = ShenandoahCollectorPolicy::_num_phases);
120 ~ShenandoahRootEvacuator();
121
122 void process_evacuate_roots(OopClosure* oops,
123 CodeBlobClosure* blobs,
124 uint worker_id);
125
126 // Number of worker threads used by the root processor.
127 uint n_workers() const;
128 };
129 #endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAHROOTPROCESSOR_HPP
|