hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 15601 df8faef6efaf
parent 15484 7395ace8a11a
child 15873 5ce4f526e0ba
child 15928 f9d5c6e4107f
equal deleted inserted replaced
15600:753e5733b5c9 15601:df8faef6efaf
   164 #endif //  ndef DTRACE_ENABLED
   164 #endif //  ndef DTRACE_ENABLED
   165 
   165 
   166 volatile int InstanceKlass::_total_instanceKlass_count = 0;
   166 volatile int InstanceKlass::_total_instanceKlass_count = 0;
   167 
   167 
   168 Klass* InstanceKlass::allocate_instance_klass(ClassLoaderData* loader_data,
   168 Klass* InstanceKlass::allocate_instance_klass(ClassLoaderData* loader_data,
   169                                                 int vtable_len,
   169                                               int vtable_len,
   170                                                 int itable_len,
   170                                               int itable_len,
   171                                                 int static_field_size,
   171                                               int static_field_size,
   172                                                 int nonstatic_oop_map_size,
   172                                               int nonstatic_oop_map_size,
   173                                                 ReferenceType rt,
   173                                               ReferenceType rt,
   174                                                 AccessFlags access_flags,
   174                                               AccessFlags access_flags,
   175                                                 Symbol* name,
   175                                               Symbol* name,
   176                                               Klass* super_klass,
   176                                               Klass* super_klass,
   177                                                 KlassHandle host_klass,
   177                                               bool is_anonymous,
   178                                                 TRAPS) {
   178                                               TRAPS) {
   179 
   179 
   180   int size = InstanceKlass::size(vtable_len, itable_len, nonstatic_oop_map_size,
   180   int size = InstanceKlass::size(vtable_len, itable_len, nonstatic_oop_map_size,
   181                                  access_flags.is_interface(),
   181                                  access_flags.is_interface(), is_anonymous);
   182                                  !host_klass.is_null());
       
   183 
   182 
   184   // Allocation
   183   // Allocation
   185   InstanceKlass* ik;
   184   InstanceKlass* ik;
   186   if (rt == REF_NONE) {
   185   if (rt == REF_NONE) {
   187     if (name == vmSymbols::java_lang_Class()) {
   186     if (name == vmSymbols::java_lang_Class()) {
   188       ik = new (loader_data, size, THREAD) InstanceMirrorKlass(
   187       ik = new (loader_data, size, THREAD) InstanceMirrorKlass(
   189         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   188         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   190         access_flags, !host_klass.is_null());
   189         access_flags, is_anonymous);
   191     } else if (name == vmSymbols::java_lang_ClassLoader() ||
   190     } else if (name == vmSymbols::java_lang_ClassLoader() ||
   192           (SystemDictionary::ClassLoader_klass_loaded() &&
   191           (SystemDictionary::ClassLoader_klass_loaded() &&
   193           super_klass != NULL &&
   192           super_klass != NULL &&
   194           super_klass->is_subtype_of(SystemDictionary::ClassLoader_klass()))) {
   193           super_klass->is_subtype_of(SystemDictionary::ClassLoader_klass()))) {
   195       ik = new (loader_data, size, THREAD) InstanceClassLoaderKlass(
   194       ik = new (loader_data, size, THREAD) InstanceClassLoaderKlass(
   196         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   195         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   197         access_flags, !host_klass.is_null());
   196         access_flags, is_anonymous);
   198     } else {
   197     } else {
   199       // normal class
   198       // normal class
   200       ik = new (loader_data, size, THREAD) InstanceKlass(
   199       ik = new (loader_data, size, THREAD) InstanceKlass(
   201         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   200         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   202         access_flags, !host_klass.is_null());
   201         access_flags, is_anonymous);
   203     }
   202     }
   204   } else {
   203   } else {
   205     // reference klass
   204     // reference klass
   206     ik = new (loader_data, size, THREAD) InstanceRefKlass(
   205     ik = new (loader_data, size, THREAD) InstanceRefKlass(
   207         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   206         vtable_len, itable_len, static_field_size, nonstatic_oop_map_size, rt,
   208         access_flags, !host_klass.is_null());
   207         access_flags, is_anonymous);
   209   }
   208   }
   210 
   209 
   211   Atomic::inc(&_total_instanceKlass_count);
   210   Atomic::inc(&_total_instanceKlass_count);
   212   return ik;
   211   return ik;
   213 }
   212 }
  2791   if (source_debug_extension() != NULL) {
  2790   if (source_debug_extension() != NULL) {
  2792     st->print(BULLET"source debug extension:       ");
  2791     st->print(BULLET"source debug extension:       ");
  2793     st->print("%s", source_debug_extension());
  2792     st->print("%s", source_debug_extension());
  2794     st->cr();
  2793     st->cr();
  2795   }
  2794   }
  2796   st->print(BULLET"annotations:       "); annotations()->print_value_on(st); st->cr();
  2795   st->print(BULLET"class annotations:       "); class_annotations()->print_value_on(st); st->cr();
       
  2796   st->print(BULLET"class type annotations:  "); class_type_annotations()->print_value_on(st); st->cr();
       
  2797   st->print(BULLET"field annotations:       "); fields_annotations()->print_value_on(st); st->cr();
       
  2798   st->print(BULLET"field type annotations:  "); fields_type_annotations()->print_value_on(st); st->cr();
  2797   {
  2799   {
  2798     ResourceMark rm;
  2800     ResourceMark rm;
  2799     // PreviousVersionInfo objects returned via PreviousVersionWalker
  2801     // PreviousVersionInfo objects returned via PreviousVersionWalker
  2800     // contain a GrowableArray of handles. We have to clean up the
  2802     // contain a GrowableArray of handles. We have to clean up the
  2801     // GrowableArray _after_ the PreviousVersionWalker destructor
  2803     // GrowableArray _after_ the PreviousVersionWalker destructor