Mercurial > hg > graal-jvmci-8
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 |