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