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
|