comparison src/share/vm/oops/methodKlass.cpp @ 6275:957c266d8bc5

Merge with http://hg.openjdk.java.net/hsx/hsx24/hotspot/
author Doug Simon <doug.simon@oracle.com>
date Tue, 21 Aug 2012 10:39:19 +0200
parents af59b4dfc9e4 1d7922586cf6
children
comparison
equal deleted inserted replaced
5891:fd8832ae511d 6275:957c266d8bc5
1 /* 1 /*
2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
119 m->set_prev_time(0); 119 m->set_prev_time(0);
120 #endif 120 #endif
121 121
122 assert(m->is_parsable(), "must be parsable here."); 122 assert(m->is_parsable(), "must be parsable here.");
123 assert(m->size() == size, "wrong size for object"); 123 assert(m->size() == size, "wrong size for object");
124 // We should not publish an uprasable object's reference
125 // into one that is parsable, since that presents problems
126 // for the concurrent parallel marking and precleaning phases
127 // of concurrent gc (CMS).
128 xconst->set_method(m);
129 return m; 124 return m;
130 } 125 }
131 126
132 127
133 void methodKlass::oop_follow_contents(oop obj) { 128 void methodKlass::oop_follow_contents(oop obj) {
134 assert (obj->is_method(), "object must be method"); 129 assert (obj->is_method(), "object must be method");
135 methodOop m = methodOop(obj); 130 methodOop m = methodOop(obj);
136 // Performance tweak: We skip iterating over the klass pointer since we 131 // Performance tweak: We skip iterating over the klass pointer since we
137 // know that Universe::methodKlassObj never moves. 132 // know that Universe::methodKlassObj never moves.
138 MarkSweep::mark_and_push(m->adr_constMethod()); 133 MarkSweep::mark_and_push(m->adr_constMethod());
139 MarkSweep::mark_and_push(m->adr_constants());
140 #ifdef GRAAL 134 #ifdef GRAAL
141 MarkSweep::mark_and_push(m->adr_graal_mirror()); 135 MarkSweep::mark_and_push(m->adr_graal_mirror());
142 #endif 136 #endif
143 MarkSweep::mark_and_push(m->adr_method_data()); 137 MarkSweep::mark_and_push(m->adr_method_data());
144 } 138 }
149 assert (obj->is_method(), "object must be method"); 143 assert (obj->is_method(), "object must be method");
150 methodOop m = methodOop(obj); 144 methodOop m = methodOop(obj);
151 // Performance tweak: We skip iterating over the klass pointer since we 145 // Performance tweak: We skip iterating over the klass pointer since we
152 // know that Universe::methodKlassObj never moves. 146 // know that Universe::methodKlassObj never moves.
153 PSParallelCompact::mark_and_push(cm, m->adr_constMethod()); 147 PSParallelCompact::mark_and_push(cm, m->adr_constMethod());
154 PSParallelCompact::mark_and_push(cm, m->adr_constants());
155 #ifdef GRAAL 148 #ifdef GRAAL
156 PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror()); 149 PSParallelCompact::mark_and_push(cm, m->adr_graal_mirror());
157 #endif 150 #endif
158 PSParallelCompact::mark_and_push(cm, m->adr_method_data()); 151 PSParallelCompact::mark_and_push(cm, m->adr_method_data());
159 } 152 }
166 // Don't call size() or oop_size() since that is a virtual call. 159 // Don't call size() or oop_size() since that is a virtual call.
167 int size = m->object_size(); 160 int size = m->object_size();
168 // Performance tweak: We skip iterating over the klass pointer since we 161 // Performance tweak: We skip iterating over the klass pointer since we
169 // know that Universe::methodKlassObj never moves 162 // know that Universe::methodKlassObj never moves
170 blk->do_oop(m->adr_constMethod()); 163 blk->do_oop(m->adr_constMethod());
171 blk->do_oop(m->adr_constants());
172 #ifdef GRAAL 164 #ifdef GRAAL
173 blk->do_oop(m->adr_graal_mirror()); 165 blk->do_oop(m->adr_graal_mirror());
174 #endif 166 #endif
175 blk->do_oop(m->adr_method_data()); 167 blk->do_oop(m->adr_method_data());
176 168
187 // Performance tweak: We skip iterating over the klass pointer since we 179 // Performance tweak: We skip iterating over the klass pointer since we
188 // know that Universe::methodKlassObj never moves. 180 // know that Universe::methodKlassObj never moves.
189 oop* adr; 181 oop* adr;
190 adr = m->adr_constMethod(); 182 adr = m->adr_constMethod();
191 if (mr.contains(adr)) blk->do_oop(adr); 183 if (mr.contains(adr)) blk->do_oop(adr);
192 adr = m->adr_constants();
193 if (mr.contains(adr)) blk->do_oop(adr);
194 #ifdef GRAAL 184 #ifdef GRAAL
195 adr = m->adr_graal_mirror(); 185 adr = m->adr_graal_mirror();
196 if (mr.contains(adr)) blk->do_oop(adr); 186 if (mr.contains(adr)) blk->do_oop(adr);
197 #endif 187 #endif
198 adr = m->adr_method_data(); 188 adr = m->adr_method_data();
209 // Don't call size() or oop_size() since that is a virtual call. 199 // Don't call size() or oop_size() since that is a virtual call.
210 int size = m->object_size(); 200 int size = m->object_size();
211 // Performance tweak: We skip iterating over the klass pointer since we 201 // Performance tweak: We skip iterating over the klass pointer since we
212 // know that Universe::methodKlassObj never moves. 202 // know that Universe::methodKlassObj never moves.
213 MarkSweep::adjust_pointer(m->adr_constMethod()); 203 MarkSweep::adjust_pointer(m->adr_constMethod());
214 MarkSweep::adjust_pointer(m->adr_constants());
215 #ifdef GRAAL 204 #ifdef GRAAL
216 MarkSweep::adjust_pointer(m->adr_graal_mirror()); 205 MarkSweep::adjust_pointer(m->adr_graal_mirror());
217 #endif 206 #endif
218 MarkSweep::adjust_pointer(m->adr_method_data()); 207 MarkSweep::adjust_pointer(m->adr_method_data());
219 208
234 223
235 int methodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { 224 int methodKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
236 assert(obj->is_method(), "should be method"); 225 assert(obj->is_method(), "should be method");
237 methodOop m = methodOop(obj); 226 methodOop m = methodOop(obj);
238 PSParallelCompact::adjust_pointer(m->adr_constMethod()); 227 PSParallelCompact::adjust_pointer(m->adr_constMethod());
239 PSParallelCompact::adjust_pointer(m->adr_constants());
240 #ifdef GRAAL 228 #ifdef GRAAL
241 PSParallelCompact::adjust_pointer(m->adr_graal_mirror()); 229 PSParallelCompact::adjust_pointer(m->adr_graal_mirror());
242 #endif 230 #endif
243 PSParallelCompact::adjust_pointer(m->adr_method_data()); 231 PSParallelCompact::adjust_pointer(m->adr_method_data());
244 return m->object_size(); 232 return m->object_size();
270 st->print_cr(" - intrinsic id: %d %s", m->intrinsic_id(), vmIntrinsics::name_at(m->intrinsic_id())); 258 st->print_cr(" - intrinsic id: %d %s", m->intrinsic_id(), vmIntrinsics::name_at(m->intrinsic_id()));
271 if (m->highest_comp_level() != CompLevel_none) 259 if (m->highest_comp_level() != CompLevel_none)
272 st->print_cr(" - highest level: %d", m->highest_comp_level()); 260 st->print_cr(" - highest level: %d", m->highest_comp_level());
273 st->print_cr(" - vtable index: %d", m->_vtable_index); 261 st->print_cr(" - vtable index: %d", m->_vtable_index);
274 st->print_cr(" - i2i entry: " INTPTR_FORMAT, m->interpreter_entry()); 262 st->print_cr(" - i2i entry: " INTPTR_FORMAT, m->interpreter_entry());
275 st->print_cr(" - adapter: " INTPTR_FORMAT, m->adapter()); 263 st->print( " - adapters: ");
264 if (m->adapter() == NULL)
265 st->print_cr(INTPTR_FORMAT, m->adapter());
266 else
267 m->adapter()->print_adapter_on(st);
276 st->print_cr(" - compiled entry " INTPTR_FORMAT, m->from_compiled_entry()); 268 st->print_cr(" - compiled entry " INTPTR_FORMAT, m->from_compiled_entry());
277 st->print_cr(" - code size: %d", m->code_size()); 269 st->print_cr(" - code size: %d", m->code_size());
278 if (m->code_size() != 0) { 270 if (m->code_size() != 0) {
279 st->print_cr(" - code start: " INTPTR_FORMAT, m->code_base()); 271 st->print_cr(" - code start: " INTPTR_FORMAT, m->code_base());
280 st->print_cr(" - code end (excl): " INTPTR_FORMAT, m->code_base() + m->code_size()); 272 st->print_cr(" - code end (excl): " INTPTR_FORMAT, m->code_base() + m->code_size());
318 } 310 }
319 } 311 }
320 if (m->code() != NULL) { 312 if (m->code() != NULL) {
321 st->print (" - compiled code: "); 313 st->print (" - compiled code: ");
322 m->code()->print_value_on(st); 314 m->code()->print_value_on(st);
323 st->cr(); 315 }
324 } 316 if (m->is_native()) {
325 if (m->is_method_handle_invoke()) {
326 st->print_cr(" - invoke method type: " INTPTR_FORMAT, (address) m->method_handle_type());
327 // m is classified as native, but it does not have an interesting
328 // native_function or signature handler
329 } else if (m->is_native()) {
330 st->print_cr(" - native function: " INTPTR_FORMAT, m->native_function()); 317 st->print_cr(" - native function: " INTPTR_FORMAT, m->native_function());
331 st->print_cr(" - signature handler: " INTPTR_FORMAT, m->signature_handler()); 318 st->print_cr(" - signature handler: " INTPTR_FORMAT, m->signature_handler());
332 } 319 }
333 } 320 }
334 321
359 Klass::oop_verify_on(obj, st); 346 Klass::oop_verify_on(obj, st);
360 guarantee(obj->is_method(), "object must be method"); 347 guarantee(obj->is_method(), "object must be method");
361 if (!obj->partially_loaded()) { 348 if (!obj->partially_loaded()) {
362 methodOop m = methodOop(obj); 349 methodOop m = methodOop(obj);
363 guarantee(m->is_perm(), "should be in permspace"); 350 guarantee(m->is_perm(), "should be in permspace");
364 guarantee(m->constants()->is_perm(), "should be in permspace");
365 guarantee(m->constants()->is_constantPool(), "should be constant pool");
366 guarantee(m->constMethod()->is_constMethod(), "should be constMethodOop"); 351 guarantee(m->constMethod()->is_constMethod(), "should be constMethodOop");
367 guarantee(m->constMethod()->is_perm(), "should be in permspace"); 352 guarantee(m->constMethod()->is_perm(), "should be in permspace");
368 methodDataOop method_data = m->method_data(); 353 methodDataOop method_data = m->method_data();
369 guarantee(method_data == NULL || 354 guarantee(method_data == NULL ||
370 method_data->is_perm(), "should be in permspace"); 355 method_data->is_perm(), "should be in permspace");