528 return vtable_indices;
529 }
530
531
532 InstanceKlass::InstanceKlass() {
533 assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
534 }
535
536 InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
537 Klass(kind),
538 _nest_members(nullptr),
539 _nest_host(nullptr),
540 _permitted_subclasses(nullptr),
541 _record_components(nullptr),
542 _static_field_size(parser.static_field_size()),
543 _nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
544 _itable_len(parser.itable_size()),
545 _nest_host_index(0),
546 _init_state(allocated),
547 _reference_type(reference_type),
548 _init_thread(nullptr)
549 {
550 set_vtable_length(parser.vtable_size());
551 set_access_flags(parser.access_flags());
552 if (parser.is_hidden()) set_is_hidden();
553 set_layout_helper(Klass::instance_layout_helper(parser.layout_size(),
554 false));
555
556 assert(nullptr == _methods, "underlying memory not zeroed?");
557 assert(is_instance_klass(), "is layout incorrect?");
558 assert(size_helper() == parser.layout_size(), "incorrect size_helper?");
559 }
560
561 void InstanceKlass::deallocate_methods(ClassLoaderData* loader_data,
562 Array<Method*>* methods) {
563 if (methods != nullptr && methods != Universe::the_empty_method_array() &&
564 !methods->is_shared()) {
565 for (int i = 0; i < methods->length(); i++) {
566 Method* method = methods->at(i);
567 if (method == nullptr) continue; // maybe null if error processing
568 // Only want to delete methods that are not executing for RedefineClasses.
3780 _st->cr();
3781 }
3782 }
3783
3784
3785 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3786 Klass::oop_print_on(obj, st);
3787
3788 if (this == vmClasses::String_klass()) {
3789 typeArrayOop value = java_lang_String::value(obj);
3790 juint length = java_lang_String::length(obj);
3791 if (value != nullptr &&
3792 value->is_typeArray() &&
3793 length <= (juint) value->length()) {
3794 st->print(BULLET"string: ");
3795 java_lang_String::print(obj, st);
3796 st->cr();
3797 }
3798 }
3799
3800 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj));
3801 FieldPrinter print_field(st, obj);
3802 print_nonstatic_fields(&print_field);
3803
3804 if (this == vmClasses::Class_klass()) {
3805 st->print(BULLET"signature: ");
3806 java_lang_Class::print_signature(obj, st);
3807 st->cr();
3808 Klass* real_klass = java_lang_Class::as_Klass(obj);
3809 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3810 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3811 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3812 }
3813 } else if (this == vmClasses::MethodType_klass()) {
3814 st->print(BULLET"signature: ");
3815 java_lang_invoke_MethodType::print_signature(obj, st);
3816 st->cr();
3817 }
3818 }
3819
3820 #ifndef PRODUCT
|
528 return vtable_indices;
529 }
530
531
532 InstanceKlass::InstanceKlass() {
533 assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
534 }
535
536 InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
537 Klass(kind),
538 _nest_members(nullptr),
539 _nest_host(nullptr),
540 _permitted_subclasses(nullptr),
541 _record_components(nullptr),
542 _static_field_size(parser.static_field_size()),
543 _nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
544 _itable_len(parser.itable_size()),
545 _nest_host_index(0),
546 _init_state(allocated),
547 _reference_type(reference_type),
548 _init_thread(nullptr),
549 _hash_offset(parser.hash_offset())
550 {
551 set_vtable_length(parser.vtable_size());
552 set_access_flags(parser.access_flags());
553 if (parser.is_hidden()) set_is_hidden();
554 set_layout_helper(Klass::instance_layout_helper(parser.layout_size(),
555 false));
556
557 assert(nullptr == _methods, "underlying memory not zeroed?");
558 assert(is_instance_klass(), "is layout incorrect?");
559 assert(size_helper() == parser.layout_size(), "incorrect size_helper?");
560 }
561
562 void InstanceKlass::deallocate_methods(ClassLoaderData* loader_data,
563 Array<Method*>* methods) {
564 if (methods != nullptr && methods != Universe::the_empty_method_array() &&
565 !methods->is_shared()) {
566 for (int i = 0; i < methods->length(); i++) {
567 Method* method = methods->at(i);
568 if (method == nullptr) continue; // maybe null if error processing
569 // Only want to delete methods that are not executing for RedefineClasses.
3781 _st->cr();
3782 }
3783 }
3784
3785
3786 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3787 Klass::oop_print_on(obj, st);
3788
3789 if (this == vmClasses::String_klass()) {
3790 typeArrayOop value = java_lang_String::value(obj);
3791 juint length = java_lang_String::length(obj);
3792 if (value != nullptr &&
3793 value->is_typeArray() &&
3794 length <= (juint) value->length()) {
3795 st->print(BULLET"string: ");
3796 java_lang_String::print(obj, st);
3797 st->cr();
3798 }
3799 }
3800
3801 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj, obj->mark()));
3802 FieldPrinter print_field(st, obj);
3803 print_nonstatic_fields(&print_field);
3804
3805 if (this == vmClasses::Class_klass()) {
3806 st->print(BULLET"signature: ");
3807 java_lang_Class::print_signature(obj, st);
3808 st->cr();
3809 Klass* real_klass = java_lang_Class::as_Klass(obj);
3810 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3811 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3812 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3813 }
3814 } else if (this == vmClasses::MethodType_klass()) {
3815 st->print(BULLET"signature: ");
3816 java_lang_invoke_MethodType::print_signature(obj, st);
3817 st->cr();
3818 }
3819 }
3820
3821 #ifndef PRODUCT
|