comparison src/share/vm/runtime/vframe.cpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents 1d7922586cf6
children 18fb7da42534
comparison
equal deleted inserted replaced
6724:36d1d483d5d6 6725:da91efe96a93
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.
144 144
145 static void print_locked_object_class_name(outputStream* st, Handle obj, const char* lock_state) { 145 static void print_locked_object_class_name(outputStream* st, Handle obj, const char* lock_state) {
146 if (obj.not_null()) { 146 if (obj.not_null()) {
147 st->print("\t- %s <" INTPTR_FORMAT "> ", lock_state, (address)obj()); 147 st->print("\t- %s <" INTPTR_FORMAT "> ", lock_state, (address)obj());
148 if (obj->klass() == SystemDictionary::Class_klass()) { 148 if (obj->klass() == SystemDictionary::Class_klass()) {
149 klassOop target_klass = java_lang_Class::as_klassOop(obj()); 149 Klass* target_klass = java_lang_Class::as_Klass(obj());
150 st->print_cr("(a java.lang.Class for %s)", instanceKlass::cast(target_klass)->external_name()); 150 st->print_cr("(a java.lang.Class for %s)", InstanceKlass::cast(target_klass)->external_name());
151 } else { 151 } else {
152 Klass* k = Klass::cast(obj->klass()); 152 Klass* k = Klass::cast(obj->klass());
153 st->print_cr("(a %s)", k->external_name()); 153 st->print_cr("(a %s)", k->external_name());
154 } 154 }
155 } 155 }
159 ResourceMark rm; 159 ResourceMark rm;
160 160
161 // If this is the first frame, and java.lang.Object.wait(...) then print out the receiver. 161 // If this is the first frame, and java.lang.Object.wait(...) then print out the receiver.
162 if (frame_count == 0) { 162 if (frame_count == 0) {
163 if (method()->name() == vmSymbols::wait_name() && 163 if (method()->name() == vmSymbols::wait_name() &&
164 instanceKlass::cast(method()->method_holder())->name() == vmSymbols::java_lang_Object()) { 164 InstanceKlass::cast(method()->method_holder())->name() == vmSymbols::java_lang_Object()) {
165 StackValueCollection* locs = locals(); 165 StackValueCollection* locs = locals();
166 if (!locs->is_empty()) { 166 if (!locs->is_empty()) {
167 StackValue* sv = locs->at(0); 167 StackValue* sv = locs->at(0);
168 if (sv->type() == T_OBJECT) { 168 if (sv->type() == T_OBJECT) {
169 Handle o = locs->at(0)->get_obj(); 169 Handle o = locs->at(0)->get_obj();
184 bool found_first_monitor = false; 184 bool found_first_monitor = false;
185 for (int index = (mons->length()-1); index >= 0; index--) { 185 for (int index = (mons->length()-1); index >= 0; index--) {
186 MonitorInfo* monitor = mons->at(index); 186 MonitorInfo* monitor = mons->at(index);
187 if (monitor->eliminated() && is_compiled_frame()) { // Eliminated in compiled code 187 if (monitor->eliminated() && is_compiled_frame()) { // Eliminated in compiled code
188 if (monitor->owner_is_scalar_replaced()) { 188 if (monitor->owner_is_scalar_replaced()) {
189 Klass* k = Klass::cast(monitor->owner_klass()); 189 Klass* k = java_lang_Class::as_Klass(monitor->owner_klass());
190 st->print("\t- eliminated <owner is scalar replaced> (a %s)", k->external_name()); 190 st->print("\t- eliminated <owner is scalar replaced> (a %s)", k->external_name());
191 } else { 191 } else {
192 oop obj = monitor->owner(); 192 oop obj = monitor->owner();
193 if (obj != NULL) { 193 if (obj != NULL) {
194 print_locked_object_class_name(st, obj, "eliminated"); 194 print_locked_object_class_name(st, obj, "eliminated");
247 247
248 int interpretedVFrame::bci() const { 248 int interpretedVFrame::bci() const {
249 return method()->bci_from(bcp()); 249 return method()->bci_from(bcp());
250 } 250 }
251 251
252 methodOop interpretedVFrame::method() const { 252 Method* interpretedVFrame::method() const {
253 return fr().interpreter_frame_method(); 253 return fr().interpreter_frame_method();
254 } 254 }
255 255
256 StackValueCollection* interpretedVFrame::locals() const { 256 StackValueCollection* interpretedVFrame::locals() const {
257 int length = method()->max_locals(); 257 int length = method()->max_locals();
525 tty->print_cr("\tmonitor list:"); 525 tty->print_cr("\tmonitor list:");
526 for (int index = (list->length()-1); index >= 0; index--) { 526 for (int index = (list->length()-1); index >= 0; index--) {
527 MonitorInfo* monitor = list->at(index); 527 MonitorInfo* monitor = list->at(index);
528 tty->print("\t obj\t"); 528 tty->print("\t obj\t");
529 if (monitor->owner_is_scalar_replaced()) { 529 if (monitor->owner_is_scalar_replaced()) {
530 Klass* k = Klass::cast(monitor->owner_klass()); 530 Klass* k = java_lang_Class::as_Klass(monitor->owner_klass());
531 tty->print("( is scalar replaced %s)", k->external_name()); 531 tty->print("( is scalar replaced %s)", k->external_name());
532 } else if (monitor->owner() == NULL) { 532 } else if (monitor->owner() == NULL) {
533 tty->print("( null )"); 533 tty->print("( null )");
534 } else { 534 } else {
535 monitor->owner()->print_value(); 535 monitor->owner()->print_value();
544 } 544 }
545 } 545 }
546 546
547 547
548 void javaVFrame::print_value() const { 548 void javaVFrame::print_value() const {
549 methodOop m = method(); 549 Method* m = method();
550 klassOop k = m->method_holder(); 550 Klass* k = m->method_holder();
551 tty->print_cr("frame( sp=" INTPTR_FORMAT ", unextended_sp=" INTPTR_FORMAT ", fp=" INTPTR_FORMAT ", pc=" INTPTR_FORMAT ")", 551 tty->print_cr("frame( sp=" INTPTR_FORMAT ", unextended_sp=" INTPTR_FORMAT ", fp=" INTPTR_FORMAT ", pc=" INTPTR_FORMAT ")",
552 _fr.sp(), _fr.unextended_sp(), _fr.fp(), _fr.pc()); 552 _fr.sp(), _fr.unextended_sp(), _fr.fp(), _fr.pc());
553 tty->print("%s.%s", Klass::cast(k)->internal_name(), m->name()->as_C_string()); 553 tty->print("%s.%s", Klass::cast(k)->internal_name(), m->name()->as_C_string());
554 554
555 if (!m->is_native()) { 555 if (!m->is_native()) {
556 Symbol* source_name = instanceKlass::cast(k)->source_file_name(); 556 Symbol* source_name = InstanceKlass::cast(k)->source_file_name();
557 int line_number = m->line_number_from_bci(bci()); 557 int line_number = m->line_number_from_bci(bci());
558 if (source_name != NULL && (line_number != -1)) { 558 if (source_name != NULL && (line_number != -1)) {
559 tty->print("(%s:%d)", source_name->as_C_string(), line_number); 559 tty->print("(%s:%d)", source_name->as_C_string(), line_number);
560 } 560 }
561 } else { 561 } else {