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