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();
3876 _st->cr();
3877 }
3878 }
3879
3880
3881 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3882 Klass::oop_print_on(obj, st);
3883
3884 if (this == vmClasses::String_klass()) {
3885 typeArrayOop value = java_lang_String::value(obj);
3886 juint length = java_lang_String::length(obj);
3887 if (value != nullptr &&
3888 value->is_typeArray() &&
3889 length <= (juint) value->length()) {
3890 st->print(BULLET"string: ");
3891 java_lang_String::print(obj, st);
3892 st->cr();
3893 }
3894 }
3895
3896 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj));
3897 FieldPrinter print_field(st, obj);
3898 print_nonstatic_fields(&print_field);
3899
3900 if (this == vmClasses::Class_klass()) {
3901 st->print(BULLET"signature: ");
3902 java_lang_Class::print_signature(obj, st);
3903 st->cr();
3904 Klass* real_klass = java_lang_Class::as_Klass(obj);
3905 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3906 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3907 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3908 }
3909 } else if (this == vmClasses::MethodType_klass()) {
3910 st->print(BULLET"signature: ");
3911 java_lang_invoke_MethodType::print_signature(obj, st);
3912 st->cr();
3913 }
3914 }
3915
3916 #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();
3877 _st->cr();
3878 }
3879 }
3880
3881
3882 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3883 Klass::oop_print_on(obj, st);
3884
3885 if (this == vmClasses::String_klass()) {
3886 typeArrayOop value = java_lang_String::value(obj);
3887 juint length = java_lang_String::length(obj);
3888 if (value != nullptr &&
3889 value->is_typeArray() &&
3890 length <= (juint) value->length()) {
3891 st->print(BULLET"string: ");
3892 java_lang_String::print(obj, st);
3893 st->cr();
3894 }
3895 }
3896
3897 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj, obj->mark()));
3898 FieldPrinter print_field(st, obj);
3899 print_nonstatic_fields(&print_field);
3900
3901 if (this == vmClasses::Class_klass()) {
3902 st->print(BULLET"signature: ");
3903 java_lang_Class::print_signature(obj, st);
3904 st->cr();
3905 Klass* real_klass = java_lang_Class::as_Klass(obj);
3906 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3907 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3908 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3909 }
3910 } else if (this == vmClasses::MethodType_klass()) {
3911 st->print(BULLET"signature: ");
3912 java_lang_invoke_MethodType::print_signature(obj, st);
3913 st->cr();
3914 }
3915 }
3916
3917 #ifndef PRODUCT
|