--- a/hotspot/src/share/vm/gc/g1/g1RootProcessor.hpp Thu Sep 08 12:30:38 2016 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1RootProcessor.hpp Mon Sep 12 16:34:36 2016 +0200
@@ -73,6 +73,11 @@
void worker_has_discovered_all_strong_classes();
void wait_until_all_strong_classes_discovered();
+ void process_all_roots(OopClosure* oops,
+ CLDClosure* clds,
+ CodeBlobClosure* blobs,
+ bool process_string_table);
+
void process_java_roots(G1RootClosures* closures,
G1GCPhaseTimes* phase_times,
uint worker_i);
@@ -81,6 +86,14 @@
G1GCPhaseTimes* phase_times,
uint worker_i);
+ void process_string_table_roots(G1RootClosures* closures,
+ G1GCPhaseTimes* phase_times,
+ uint worker_i);
+
+ void process_code_cache_roots(CodeBlobClosure* code_closure,
+ G1GCPhaseTimes* phase_times,
+ uint worker_i);
+
public:
G1RootProcessor(G1CollectedHeap* g1h, uint n_workers);
@@ -99,6 +112,13 @@
CLDClosure* clds,
CodeBlobClosure* blobs);
+ // Apply oops, clds and blobs to strongly and weakly reachable roots in the system,
+ // the only thing different from process_all_roots is that we skip the string table
+ // to avoid keeping every string live when doing class unloading.
+ void process_all_roots_no_string_table(OopClosure* oops,
+ CLDClosure* clds,
+ CodeBlobClosure* blobs);
+
// Number of worker threads used by the root processor.
uint n_workers() const;
};