comparison src/share/vm/gc_implementation/g1/g1RemSet.hpp @ 12080:5888334c9c24

7145569: G1: optimize nmethods scanning Summary: Add a list of nmethods to the RSet for a region that contain references into the region. Skip scanning the code cache during root scanning and scan the nmethod lists during RSet scanning instead. Reviewed-by: tschatzl, brutisso, mgerdin, twisti, kvn
author johnc
date Thu, 15 Aug 2013 10:52:18 +0200
parents e72f7eecc96d
children c319b188c7b2
comparison
equal deleted inserted replaced
12033:bd902affe102 12080:5888334c9c24
79 void cleanupHRRS(); 79 void cleanupHRRS();
80 80
81 G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs); 81 G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs);
82 ~G1RemSet(); 82 ~G1RemSet();
83 83
84 // Invoke "blk->do_oop" on all pointers into the CS in objects in regions 84 // Invoke "blk->do_oop" on all pointers into the collection set
85 // outside the CS (having invoked "blk->set_region" to set the "from" 85 // from objects in regions outside the collection set (having
86 // region correctly beforehand.) The "worker_i" param is for the 86 // invoked "blk->set_region" to set the "from" region correctly
87 // parallel case where the number of the worker thread calling this 87 // beforehand.)
88 // function can be helpful in partitioning the work to be done. It 88 //
89 // should be the same as the "i" passed to the calling thread's 89 // Invoke code_root_cl->do_code_blob on the unmarked nmethods
90 // work(i) function. In the sequential case this param will be ingored. 90 // on the strong code roots list for each region in the
91 void oops_into_collection_set_do(OopsInHeapRegionClosure* blk, int worker_i); 91 // collection set.
92 //
93 // The "worker_i" param is for the parallel case where the id
94 // of the worker thread calling this function can be helpful in
95 // partitioning the work to be done. It should be the same as
96 // the "i" passed to the calling thread's work(i) function.
97 // In the sequential case this param will be ignored.
98 void oops_into_collection_set_do(OopsInHeapRegionClosure* blk,
99 CodeBlobToOopClosure* code_root_cl,
100 int worker_i);
92 101
93 // Prepare for and cleanup after an oops_into_collection_set_do 102 // Prepare for and cleanup after an oops_into_collection_set_do
94 // call. Must call each of these once before and after (in sequential 103 // call. Must call each of these once before and after (in sequential
95 // code) any threads call oops_into_collection_set_do. (This offers an 104 // code) any threads call oops_into_collection_set_do. (This offers an
96 // opportunity to sequential setup and teardown of structures needed by a 105 // opportunity to sequential setup and teardown of structures needed by a
97 // parallel iteration over the CS's RS.) 106 // parallel iteration over the CS's RS.)
98 void prepare_for_oops_into_collection_set_do(); 107 void prepare_for_oops_into_collection_set_do();
99 void cleanup_after_oops_into_collection_set_do(); 108 void cleanup_after_oops_into_collection_set_do();
100 109
101 void scanRS(OopsInHeapRegionClosure* oc, int worker_i); 110 void scanRS(OopsInHeapRegionClosure* oc,
111 CodeBlobToOopClosure* code_root_cl,
112 int worker_i);
113
102 void updateRS(DirtyCardQueue* into_cset_dcq, int worker_i); 114 void updateRS(DirtyCardQueue* into_cset_dcq, int worker_i);
103 115
104 CardTableModRefBS* ct_bs() { return _ct_bs; } 116 CardTableModRefBS* ct_bs() { return _ct_bs; }
105 size_t cardsScanned() { return _total_cards_scanned; } 117 size_t cardsScanned() { return _total_cards_scanned; }
106 118