< prev index next >

src/hotspot/share/oops/instanceKlass.cpp

Print this page

 520   return vtable_indices;
 521 }
 522 
 523 
 524 InstanceKlass::InstanceKlass() {
 525   assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
 526 }
 527 
 528 InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
 529   Klass(kind),
 530   _nest_members(nullptr),
 531   _nest_host(nullptr),
 532   _permitted_subclasses(nullptr),
 533   _record_components(nullptr),
 534   _static_field_size(parser.static_field_size()),
 535   _nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
 536   _itable_len(parser.itable_size()),
 537   _nest_host_index(0),
 538   _init_state(allocated),
 539   _reference_type(reference_type),
 540   _init_thread(nullptr)

 541 {
 542   set_vtable_length(parser.vtable_size());
 543   set_access_flags(parser.access_flags());
 544   if (parser.is_hidden()) set_is_hidden();
 545   set_layout_helper(Klass::instance_layout_helper(parser.layout_size(),
 546                                                     false));
 547 
 548   assert(nullptr == _methods, "underlying memory not zeroed?");
 549   assert(is_instance_klass(), "is layout incorrect?");
 550   assert(size_helper() == parser.layout_size(), "incorrect size_helper?");
 551 }
 552 
 553 void InstanceKlass::set_is_cloneable() {
 554   if (name() == vmSymbols::java_lang_invoke_MemberName()) {
 555     assert(is_final(), "no subclasses allowed");
 556     // MemberName cloning should not be intrinsified and always happen in JVM_Clone.
 557   } else if (reference_type() != REF_NONE) {
 558     // Reference cloning should not be intrinsified and always happen in JVM_Clone.
 559   } else {
 560     set_is_cloneable_fast();

3834      _st->cr();
3835    }
3836 }
3837 
3838 
3839 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3840   Klass::oop_print_on(obj, st);
3841 
3842   if (this == vmClasses::String_klass()) {
3843     typeArrayOop value  = java_lang_String::value(obj);
3844     juint        length = java_lang_String::length(obj);
3845     if (value != nullptr &&
3846         value->is_typeArray() &&
3847         length <= (juint) value->length()) {
3848       st->print(BULLET"string: ");
3849       java_lang_String::print(obj, st);
3850       st->cr();
3851     }
3852   }
3853 
3854   st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj));
3855   FieldPrinter print_field(st, obj);
3856   print_nonstatic_fields(&print_field);
3857 
3858   if (this == vmClasses::Class_klass()) {
3859     st->print(BULLET"signature: ");
3860     java_lang_Class::print_signature(obj, st);
3861     st->cr();
3862     Klass* real_klass = java_lang_Class::as_Klass(obj);
3863     if (real_klass != nullptr && real_klass->is_instance_klass()) {
3864       st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3865       InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3866     }
3867   } else if (this == vmClasses::MethodType_klass()) {
3868     st->print(BULLET"signature: ");
3869     java_lang_invoke_MethodType::print_signature(obj, st);
3870     st->cr();
3871   }
3872 }
3873 
3874 #ifndef PRODUCT

 520   return vtable_indices;
 521 }
 522 
 523 
 524 InstanceKlass::InstanceKlass() {
 525   assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
 526 }
 527 
 528 InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
 529   Klass(kind),
 530   _nest_members(nullptr),
 531   _nest_host(nullptr),
 532   _permitted_subclasses(nullptr),
 533   _record_components(nullptr),
 534   _static_field_size(parser.static_field_size()),
 535   _nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
 536   _itable_len(parser.itable_size()),
 537   _nest_host_index(0),
 538   _init_state(allocated),
 539   _reference_type(reference_type),
 540   _init_thread(nullptr),
 541   _hash_offset(parser.hash_offset())
 542 {
 543   set_vtable_length(parser.vtable_size());
 544   set_access_flags(parser.access_flags());
 545   if (parser.is_hidden()) set_is_hidden();
 546   set_layout_helper(Klass::instance_layout_helper(parser.layout_size(),
 547                                                     false));
 548 
 549   assert(nullptr == _methods, "underlying memory not zeroed?");
 550   assert(is_instance_klass(), "is layout incorrect?");
 551   assert(size_helper() == parser.layout_size(), "incorrect size_helper?");
 552 }
 553 
 554 void InstanceKlass::set_is_cloneable() {
 555   if (name() == vmSymbols::java_lang_invoke_MemberName()) {
 556     assert(is_final(), "no subclasses allowed");
 557     // MemberName cloning should not be intrinsified and always happen in JVM_Clone.
 558   } else if (reference_type() != REF_NONE) {
 559     // Reference cloning should not be intrinsified and always happen in JVM_Clone.
 560   } else {
 561     set_is_cloneable_fast();

3835      _st->cr();
3836    }
3837 }
3838 
3839 
3840 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3841   Klass::oop_print_on(obj, st);
3842 
3843   if (this == vmClasses::String_klass()) {
3844     typeArrayOop value  = java_lang_String::value(obj);
3845     juint        length = java_lang_String::length(obj);
3846     if (value != nullptr &&
3847         value->is_typeArray() &&
3848         length <= (juint) value->length()) {
3849       st->print(BULLET"string: ");
3850       java_lang_String::print(obj, st);
3851       st->cr();
3852     }
3853   }
3854 
3855   st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj, obj->mark()));
3856   FieldPrinter print_field(st, obj);
3857   print_nonstatic_fields(&print_field);
3858 
3859   if (this == vmClasses::Class_klass()) {
3860     st->print(BULLET"signature: ");
3861     java_lang_Class::print_signature(obj, st);
3862     st->cr();
3863     Klass* real_klass = java_lang_Class::as_Klass(obj);
3864     if (real_klass != nullptr && real_klass->is_instance_klass()) {
3865       st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3866       InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3867     }
3868   } else if (this == vmClasses::MethodType_klass()) {
3869     st->print(BULLET"signature: ");
3870     java_lang_invoke_MethodType::print_signature(obj, st);
3871     st->cr();
3872   }
3873 }
3874 
3875 #ifndef PRODUCT
< prev index next >