57 enum G1H_process_roots_tasks {
58 G1RP_PS_Universe_oops_do,
59 G1RP_PS_JNIHandles_oops_do,
60 G1RP_PS_ObjectSynchronizer_oops_do,
61 G1RP_PS_Management_oops_do,
62 G1RP_PS_SystemDictionary_oops_do,
63 G1RP_PS_ClassLoaderDataGraph_oops_do,
64 G1RP_PS_jvmti_oops_do,
65 G1RP_PS_CodeCache_oops_do,
66 AOT_ONLY(G1RP_PS_aot_oops_do COMMA)
67 G1RP_PS_refProcessor_oops_do,
68 // Leave this one last.
69 G1RP_PS_NumElements
70 };
71
72 void worker_has_discovered_all_strong_classes();
73 void wait_until_all_strong_classes_discovered();
74
75 void process_java_roots(G1RootClosures* closures,
76 G1GCPhaseTimes* phase_times,
77 uint worker_i);
78
79 void process_vm_roots(G1RootClosures* closures,
80 G1GCPhaseTimes* phase_times,
81 uint worker_i);
82
83 void process_code_cache_roots(CodeBlobClosure* code_closure,
84 G1GCPhaseTimes* phase_times,
85 uint worker_i);
86
87 public:
88 G1RootProcessor(G1CollectedHeap* g1h, uint n_workers);
89
90 // Apply correct closures from pss to the strongly and weakly reachable roots in the system
91 // in a single pass.
92 // Record and report timing measurements for sub phases using worker_id.
93 void evacuate_roots(G1ParScanThreadState* pss, uint worker_id);
94
95 // Apply oops, clds and blobs to all strongly reachable roots in the system
96 void process_strong_roots(OopClosure* oops,
97 CLDClosure* clds,
|
57 enum G1H_process_roots_tasks {
58 G1RP_PS_Universe_oops_do,
59 G1RP_PS_JNIHandles_oops_do,
60 G1RP_PS_ObjectSynchronizer_oops_do,
61 G1RP_PS_Management_oops_do,
62 G1RP_PS_SystemDictionary_oops_do,
63 G1RP_PS_ClassLoaderDataGraph_oops_do,
64 G1RP_PS_jvmti_oops_do,
65 G1RP_PS_CodeCache_oops_do,
66 AOT_ONLY(G1RP_PS_aot_oops_do COMMA)
67 G1RP_PS_refProcessor_oops_do,
68 // Leave this one last.
69 G1RP_PS_NumElements
70 };
71
72 void worker_has_discovered_all_strong_classes();
73 void wait_until_all_strong_classes_discovered();
74
75 void process_java_roots(G1RootClosures* closures,
76 G1GCPhaseTimes* phase_times,
77 uint worker_i,
78 bool notify_claimed_roots_done = false);
79
80 void process_vm_roots(G1RootClosures* closures,
81 G1GCPhaseTimes* phase_times,
82 uint worker_i);
83
84 void process_code_cache_roots(CodeBlobClosure* code_closure,
85 G1GCPhaseTimes* phase_times,
86 uint worker_i);
87
88 public:
89 G1RootProcessor(G1CollectedHeap* g1h, uint n_workers);
90
91 // Apply correct closures from pss to the strongly and weakly reachable roots in the system
92 // in a single pass.
93 // Record and report timing measurements for sub phases using worker_id.
94 void evacuate_roots(G1ParScanThreadState* pss, uint worker_id);
95
96 // Apply oops, clds and blobs to all strongly reachable roots in the system
97 void process_strong_roots(OopClosure* oops,
98 CLDClosure* clds,
|