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.
3786 _st->cr();
3787 }
3788 }
3789
3790
3791 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3792 Klass::oop_print_on(obj, st);
3793
3794 if (this == vmClasses::String_klass()) {
3795 typeArrayOop value = java_lang_String::value(obj);
3796 juint length = java_lang_String::length(obj);
3797 if (value != nullptr &&
3798 value->is_typeArray() &&
3799 length <= (juint) value->length()) {
3800 st->print(BULLET"string: ");
3801 java_lang_String::print(obj, st);
3802 st->cr();
3803 }
3804 }
3805
3806 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj));
3807 FieldPrinter print_field(st, obj);
3808 print_nonstatic_fields(&print_field);
3809
3810 if (this == vmClasses::Class_klass()) {
3811 st->print(BULLET"signature: ");
3812 java_lang_Class::print_signature(obj, st);
3813 st->cr();
3814 Klass* real_klass = java_lang_Class::as_Klass(obj);
3815 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3816 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3817 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3818 }
3819 } else if (this == vmClasses::MethodType_klass()) {
3820 st->print(BULLET"signature: ");
3821 java_lang_invoke_MethodType::print_signature(obj, st);
3822 st->cr();
3823 }
3824 }
3825
3826 #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.
3787 _st->cr();
3788 }
3789 }
3790
3791
3792 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3793 Klass::oop_print_on(obj, st);
3794
3795 if (this == vmClasses::String_klass()) {
3796 typeArrayOop value = java_lang_String::value(obj);
3797 juint length = java_lang_String::length(obj);
3798 if (value != nullptr &&
3799 value->is_typeArray() &&
3800 length <= (juint) value->length()) {
3801 st->print(BULLET"string: ");
3802 java_lang_String::print(obj, st);
3803 st->cr();
3804 }
3805 }
3806
3807 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj, obj->mark()));
3808 FieldPrinter print_field(st, obj);
3809 print_nonstatic_fields(&print_field);
3810
3811 if (this == vmClasses::Class_klass()) {
3812 st->print(BULLET"signature: ");
3813 java_lang_Class::print_signature(obj, st);
3814 st->cr();
3815 Klass* real_klass = java_lang_Class::as_Klass(obj);
3816 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3817 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3818 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3819 }
3820 } else if (this == vmClasses::MethodType_klass()) {
3821 st->print(BULLET"signature: ");
3822 java_lang_invoke_MethodType::print_signature(obj, st);
3823 st->cr();
3824 }
3825 }
3826
3827 #ifndef PRODUCT
|