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