hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 4571 80b553bddc26
parent 4094 1f424b2b2171
child 4573 6358f8c9ed3b
equal deleted inserted replaced
4569:f372ea9e5ed4 4571:80b553bddc26
   381     {
   381     {
   382       EXCEPTION_MARK;
   382       EXCEPTION_MARK;
   383       this_oop->set_initialization_state_and_notify(initialization_error, THREAD);
   383       this_oop->set_initialization_state_and_notify(initialization_error, THREAD);
   384       CLEAR_PENDING_EXCEPTION;   // ignore any exception thrown, class initialization error is thrown below
   384       CLEAR_PENDING_EXCEPTION;   // ignore any exception thrown, class initialization error is thrown below
   385     }
   385     }
   386     if (e->is_a(SystemDictionary::error_klass())) {
   386     if (e->is_a(SystemDictionary::Error_klass())) {
   387       THROW_OOP(e());
   387       THROW_OOP(e());
   388     } else {
   388     } else {
   389       JavaCallArguments args(e);
   389       JavaCallArguments args(e);
   390       THROW_ARG(vmSymbolHandles::java_lang_ExceptionInInitializerError(),
   390       THROW_ARG(vmSymbolHandles::java_lang_ExceptionInInitializerError(),
   391                 vmSymbolHandles::throwable_void_signature(),
   391                 vmSymbolHandles::throwable_void_signature(),
   566   if (is_interface() || is_abstract()) {
   566   if (is_interface() || is_abstract()) {
   567     ResourceMark rm(THREAD);
   567     ResourceMark rm(THREAD);
   568     THROW_MSG(throwError ? vmSymbols::java_lang_InstantiationError()
   568     THROW_MSG(throwError ? vmSymbols::java_lang_InstantiationError()
   569               : vmSymbols::java_lang_InstantiationException(), external_name());
   569               : vmSymbols::java_lang_InstantiationException(), external_name());
   570   }
   570   }
   571   if (as_klassOop() == SystemDictionary::class_klass()) {
   571   if (as_klassOop() == SystemDictionary::Class_klass()) {
   572     ResourceMark rm(THREAD);
   572     ResourceMark rm(THREAD);
   573     THROW_MSG(throwError ? vmSymbols::java_lang_IllegalAccessError()
   573     THROW_MSG(throwError ? vmSymbols::java_lang_IllegalAccessError()
   574               : vmSymbols::java_lang_IllegalAccessException(), external_name());
   574               : vmSymbols::java_lang_IllegalAccessException(), external_name());
   575   }
   575   }
   576 }
   576 }
  2221 
  2221 
  2222 
  2222 
  2223 void instanceKlass::oop_print_on(oop obj, outputStream* st) {
  2223 void instanceKlass::oop_print_on(oop obj, outputStream* st) {
  2224   Klass::oop_print_on(obj, st);
  2224   Klass::oop_print_on(obj, st);
  2225 
  2225 
  2226   if (as_klassOop() == SystemDictionary::string_klass()) {
  2226   if (as_klassOop() == SystemDictionary::String_klass()) {
  2227     typeArrayOop value  = java_lang_String::value(obj);
  2227     typeArrayOop value  = java_lang_String::value(obj);
  2228     juint        offset = java_lang_String::offset(obj);
  2228     juint        offset = java_lang_String::offset(obj);
  2229     juint        length = java_lang_String::length(obj);
  2229     juint        length = java_lang_String::length(obj);
  2230     if (value != NULL &&
  2230     if (value != NULL &&
  2231         value->is_typeArray() &&
  2231         value->is_typeArray() &&
  2241 
  2241 
  2242   st->print_cr(BULLET"---- fields (total size %d words):", oop_size(obj));
  2242   st->print_cr(BULLET"---- fields (total size %d words):", oop_size(obj));
  2243   FieldPrinter print_nonstatic_field(st, obj);
  2243   FieldPrinter print_nonstatic_field(st, obj);
  2244   do_nonstatic_fields(&print_nonstatic_field);
  2244   do_nonstatic_fields(&print_nonstatic_field);
  2245 
  2245 
  2246   if (as_klassOop() == SystemDictionary::class_klass()) {
  2246   if (as_klassOop() == SystemDictionary::Class_klass()) {
  2247     st->print(BULLET"signature: ");
  2247     st->print(BULLET"signature: ");
  2248     java_lang_Class::print_signature(obj, st);
  2248     java_lang_Class::print_signature(obj, st);
  2249     st->cr();
  2249     st->cr();
  2250     klassOop mirrored_klass = java_lang_Class::as_klassOop(obj);
  2250     klassOop mirrored_klass = java_lang_Class::as_klassOop(obj);
  2251     st->print(BULLET"fake entry for mirror: ");
  2251     st->print(BULLET"fake entry for mirror: ");
  2268 
  2268 
  2269 void instanceKlass::oop_print_value_on(oop obj, outputStream* st) {
  2269 void instanceKlass::oop_print_value_on(oop obj, outputStream* st) {
  2270   st->print("a ");
  2270   st->print("a ");
  2271   name()->print_value_on(st);
  2271   name()->print_value_on(st);
  2272   obj->print_address_on(st);
  2272   obj->print_address_on(st);
  2273   if (as_klassOop() == SystemDictionary::string_klass()
  2273   if (as_klassOop() == SystemDictionary::String_klass()
  2274       && java_lang_String::value(obj) != NULL) {
  2274       && java_lang_String::value(obj) != NULL) {
  2275     ResourceMark rm;
  2275     ResourceMark rm;
  2276     int len = java_lang_String::length(obj);
  2276     int len = java_lang_String::length(obj);
  2277     int plen = (len < 24 ? len : 12);
  2277     int plen = (len < 24 ? len : 12);
  2278     char* str = java_lang_String::as_utf8_string(obj, 0, plen);
  2278     char* str = java_lang_String::as_utf8_string(obj, 0, plen);
  2279     st->print(" = \"%s\"", str);
  2279     st->print(" = \"%s\"", str);
  2280     if (len > plen)
  2280     if (len > plen)
  2281       st->print("...[%d]", len);
  2281       st->print("...[%d]", len);
  2282   } else if (as_klassOop() == SystemDictionary::class_klass()) {
  2282   } else if (as_klassOop() == SystemDictionary::Class_klass()) {
  2283     klassOop k = java_lang_Class::as_klassOop(obj);
  2283     klassOop k = java_lang_Class::as_klassOop(obj);
  2284     st->print(" = ");
  2284     st->print(" = ");
  2285     if (k != NULL) {
  2285     if (k != NULL) {
  2286       k->print_value_on(st);
  2286       k->print_value_on(st);
  2287     } else {
  2287     } else {
  2344     // Verify that java.lang.Class instances have a fake oop field added.
  2344     // Verify that java.lang.Class instances have a fake oop field added.
  2345     instanceKlass* ik = instanceKlass::cast(k);
  2345     instanceKlass* ik = instanceKlass::cast(k);
  2346 
  2346 
  2347     // Check that we have the right class
  2347     // Check that we have the right class
  2348     static bool first_time = true;
  2348     static bool first_time = true;
  2349     guarantee(k == SystemDictionary::class_klass() && first_time, "Invalid verify of maps");
  2349     guarantee(k == SystemDictionary::Class_klass() && first_time, "Invalid verify of maps");
  2350     first_time = false;
  2350     first_time = false;
  2351     const int extra = java_lang_Class::number_of_fake_oop_fields;
  2351     const int extra = java_lang_Class::number_of_fake_oop_fields;
  2352     guarantee(ik->nonstatic_field_size() == extra, "just checking");
  2352     guarantee(ik->nonstatic_field_size() == extra, "just checking");
  2353     guarantee(ik->nonstatic_oop_map_count() == 1, "just checking");
  2353     guarantee(ik->nonstatic_oop_map_count() == 1, "just checking");
  2354     guarantee(ik->size_helper() == align_object_size(instanceOopDesc::header_size() + extra), "just checking");
  2354     guarantee(ik->size_helper() == align_object_size(instanceOopDesc::header_size() + extra), "just checking");