Mercurial > hg > truffle
comparison src/share/vm/oops/methodDataKlass.cpp @ 4979:18a5539bf19b
More diff vs hsx24 optimizations.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Mon, 27 Feb 2012 21:43:51 +0100 |
parents | 59d3d0b80975 |
children |
comparison
equal
deleted
inserted
replaced
4978:99d3d8a72252 | 4979:18a5539bf19b |
---|---|
33 #include "oops/methodDataOop.hpp" | 33 #include "oops/methodDataOop.hpp" |
34 #include "oops/oop.inline.hpp" | 34 #include "oops/oop.inline.hpp" |
35 #include "oops/oop.inline2.hpp" | 35 #include "oops/oop.inline2.hpp" |
36 #include "runtime/handles.inline.hpp" | 36 #include "runtime/handles.inline.hpp" |
37 #ifndef SERIALGC | 37 #ifndef SERIALGC |
38 #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" | |
39 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" | 38 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" |
40 #include "oops/oop.pcgc.inline.hpp" | 39 #include "oops/oop.pcgc.inline.hpp" |
41 #endif | 40 #endif |
42 | 41 |
43 klassOop methodDataKlass::create_klass(TRAPS) { | 42 klassOop methodDataKlass::create_klass(TRAPS) { |
83 assert (obj->is_methodData(), "object must be method data"); | 82 assert (obj->is_methodData(), "object must be method data"); |
84 methodDataOop m = methodDataOop(obj); | 83 methodDataOop m = methodDataOop(obj); |
85 | 84 |
86 obj->follow_header(); | 85 obj->follow_header(); |
87 MarkSweep::mark_and_push(m->adr_method()); | 86 MarkSweep::mark_and_push(m->adr_method()); |
87 #ifdef GRAAL | |
88 MarkSweep::mark_and_push(m->adr_graal_mirror()); | 88 MarkSweep::mark_and_push(m->adr_graal_mirror()); |
89 #endif | |
89 ResourceMark rm; | 90 ResourceMark rm; |
90 for (ProfileData* data = m->first_data(); | 91 for (ProfileData* data = m->first_data(); |
91 m->is_valid(data); | 92 m->is_valid(data); |
92 data = m->next_data(data)) { | 93 data = m->next_data(data)) { |
93 data->follow_contents(); | 94 data->follow_contents(); |
100 assert (obj->is_methodData(), "object must be method data"); | 101 assert (obj->is_methodData(), "object must be method data"); |
101 methodDataOop m = methodDataOop(obj); | 102 methodDataOop m = methodDataOop(obj); |
102 | 103 |
103 obj->follow_header(cm); | 104 obj->follow_header(cm); |
104 PSParallelCompact::mark_and_push(cm, m->adr_method()); | 105 PSParallelCompact::mark_and_push(cm, m->adr_method()); |
106 #ifdef GRAAL | |
105 PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror()); | 107 PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror()); |
108 #endif | |
106 ResourceMark rm; | 109 ResourceMark rm; |
107 for (ProfileData* data = m->first_data(); | 110 for (ProfileData* data = m->first_data(); |
108 m->is_valid(data); | 111 m->is_valid(data); |
109 data = m->next_data(data)) { | 112 data = m->next_data(data)) { |
110 data->follow_contents(cm); | 113 data->follow_contents(cm); |
120 // Don't call size() or oop_size() since that is a virtual call. | 123 // Don't call size() or oop_size() since that is a virtual call. |
121 int size = m->object_size(); | 124 int size = m->object_size(); |
122 | 125 |
123 obj->oop_iterate_header(blk); | 126 obj->oop_iterate_header(blk); |
124 blk->do_oop(m->adr_method()); | 127 blk->do_oop(m->adr_method()); |
128 #ifdef GRAAL | |
125 blk->do_oop(m->adr_graal_mirror()); | 129 blk->do_oop(m->adr_graal_mirror()); |
130 #endif | |
126 ResourceMark rm; | 131 ResourceMark rm; |
127 for (ProfileData* data = m->first_data(); | 132 for (ProfileData* data = m->first_data(); |
128 m->is_valid(data); | 133 m->is_valid(data); |
129 data = m->next_data(data)) { | 134 data = m->next_data(data)) { |
130 data->oop_iterate(blk); | 135 data->oop_iterate(blk); |
142 obj->oop_iterate_header(blk, mr); | 147 obj->oop_iterate_header(blk, mr); |
143 oop* adr = m->adr_method(); | 148 oop* adr = m->adr_method(); |
144 if (mr.contains(adr)) { | 149 if (mr.contains(adr)) { |
145 blk->do_oop(m->adr_method()); | 150 blk->do_oop(m->adr_method()); |
146 } | 151 } |
152 #ifdef GRAAL | |
147 adr = m->adr_graal_mirror(); | 153 adr = m->adr_graal_mirror(); |
148 if(mr.contains(adr)) { | 154 if(mr.contains(adr)) { |
149 blk->do_oop(m->adr_graal_mirror()); | 155 blk->do_oop(m->adr_graal_mirror()); |
150 } | 156 } |
151 | 157 #endif |
152 ResourceMark rm; | 158 ResourceMark rm; |
153 for (ProfileData* data = m->first_data(); | 159 for (ProfileData* data = m->first_data(); |
154 m->is_valid(data); | 160 m->is_valid(data); |
155 data = m->next_data(data)) { | 161 data = m->next_data(data)) { |
156 data->oop_iterate_m(blk, mr); | 162 data->oop_iterate_m(blk, mr); |
165 // Don't call size() or oop_size() since that is a virtual call. | 171 // Don't call size() or oop_size() since that is a virtual call. |
166 int size = m->object_size(); | 172 int size = m->object_size(); |
167 | 173 |
168 obj->adjust_header(); | 174 obj->adjust_header(); |
169 MarkSweep::adjust_pointer(m->adr_method()); | 175 MarkSweep::adjust_pointer(m->adr_method()); |
176 #ifdef GRAAL | |
170 MarkSweep::adjust_pointer(m->adr_graal_mirror()); | 177 MarkSweep::adjust_pointer(m->adr_graal_mirror()); |
178 #endif | |
171 ResourceMark rm; | 179 ResourceMark rm; |
172 ProfileData* data; | 180 ProfileData* data; |
173 for (data = m->first_data(); m->is_valid(data); data = m->next_data(data)) { | 181 for (data = m->first_data(); m->is_valid(data); data = m->next_data(data)) { |
174 data->adjust_pointers(); | 182 data->adjust_pointers(); |
175 } | 183 } |
181 void methodDataKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { | 189 void methodDataKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
182 assert (obj->is_methodData(), "object must be method data"); | 190 assert (obj->is_methodData(), "object must be method data"); |
183 methodDataOop m = methodDataOop(obj); | 191 methodDataOop m = methodDataOop(obj); |
184 // This should never point into the young gen. | 192 // This should never point into the young gen. |
185 assert(!PSScavenge::should_scavenge(m->adr_method()), "Sanity"); | 193 assert(!PSScavenge::should_scavenge(m->adr_method()), "Sanity"); |
186 | 194 #ifdef GRAAL |
187 oop* adr = m->adr_graal_mirror(); | 195 oop* adr = m->adr_graal_mirror(); |
188 if(PSScavenge::should_scavenge(adr)) { | 196 if(PSScavenge::should_scavenge(adr)) { |
189 pm->claim_or_forward_depth(adr); | 197 pm->claim_or_forward_depth(adr); |
190 } | 198 } |
199 #endif | |
191 } | 200 } |
192 | 201 |
193 int methodDataKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { | 202 int methodDataKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { |
194 assert(obj->is_methodData(), "should be method data"); | 203 assert(obj->is_methodData(), "should be method data"); |
195 methodDataOop m = methodDataOop(obj); | 204 methodDataOop m = methodDataOop(obj); |
196 | 205 |
197 PSParallelCompact::adjust_pointer(m->adr_method()); | 206 PSParallelCompact::adjust_pointer(m->adr_method()); |
207 #ifdef GRAAL | |
198 PSParallelCompact::adjust_pointer(m->adr_graal_mirror()); | 208 PSParallelCompact::adjust_pointer(m->adr_graal_mirror()); |
209 #endif | |
199 | 210 |
200 ResourceMark rm; | 211 ResourceMark rm; |
201 ProfileData* data; | 212 ProfileData* data; |
202 for (data = m->first_data(); m->is_valid(data); data = m->next_data(data)) { | 213 for (data = m->first_data(); m->is_valid(data); data = m->next_data(data)) { |
203 data->update_pointers(); | 214 data->update_pointers(); |