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();