522 return vtable_indices;
523 }
524
525
526 InstanceKlass::InstanceKlass() {
527 assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
528 }
529
530 InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
531 Klass(kind),
532 _nest_members(nullptr),
533 _nest_host(nullptr),
534 _permitted_subclasses(nullptr),
535 _record_components(nullptr),
536 _static_field_size(parser.static_field_size()),
537 _nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
538 _itable_len(parser.itable_size()),
539 _nest_host_index(0),
540 _init_state(allocated),
541 _reference_type(reference_type),
542 _init_thread(nullptr)
543 {
544 set_vtable_length(parser.vtable_size());
545 set_access_flags(parser.access_flags());
546 if (parser.is_hidden()) set_is_hidden();
547 set_layout_helper(Klass::instance_layout_helper(parser.layout_size(),
548 false));
549
550 assert(nullptr == _methods, "underlying memory not zeroed?");
551 assert(is_instance_klass(), "is layout incorrect?");
552 assert(size_helper() == parser.layout_size(), "incorrect size_helper?");
553 }
554
555 void InstanceKlass::deallocate_methods(ClassLoaderData* loader_data,
556 Array<Method*>* methods) {
557 if (methods != nullptr && methods != Universe::the_empty_method_array() &&
558 !methods->in_aot_cache()) {
559 for (int i = 0; i < methods->length(); i++) {
560 Method* method = methods->at(i);
561 if (method == nullptr) continue; // maybe null if error processing
562 // Only want to delete methods that are not executing for RedefineClasses.
3836 _st->cr();
3837 }
3838 }
3839
3840
3841 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3842 Klass::oop_print_on(obj, st);
3843
3844 if (this == vmClasses::String_klass()) {
3845 typeArrayOop value = java_lang_String::value(obj);
3846 juint length = java_lang_String::length(obj);
3847 if (value != nullptr &&
3848 value->is_typeArray() &&
3849 length <= (juint) value->length()) {
3850 st->print(BULLET"string: ");
3851 java_lang_String::print(obj, st);
3852 st->cr();
3853 }
3854 }
3855
3856 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj));
3857 FieldPrinter print_field(st, obj);
3858 print_nonstatic_fields(&print_field);
3859
3860 if (this == vmClasses::Class_klass()) {
3861 st->print(BULLET"signature: ");
3862 java_lang_Class::print_signature(obj, st);
3863 st->cr();
3864 Klass* real_klass = java_lang_Class::as_Klass(obj);
3865 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3866 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3867 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3868 }
3869 } else if (this == vmClasses::MethodType_klass()) {
3870 st->print(BULLET"signature: ");
3871 java_lang_invoke_MethodType::print_signature(obj, st);
3872 st->cr();
3873 }
3874 }
3875
3876 #ifndef PRODUCT
|
522 return vtable_indices;
523 }
524
525
526 InstanceKlass::InstanceKlass() {
527 assert(CDSConfig::is_dumping_static_archive() || CDSConfig::is_using_archive(), "only for CDS");
528 }
529
530 InstanceKlass::InstanceKlass(const ClassFileParser& parser, KlassKind kind, ReferenceType reference_type) :
531 Klass(kind),
532 _nest_members(nullptr),
533 _nest_host(nullptr),
534 _permitted_subclasses(nullptr),
535 _record_components(nullptr),
536 _static_field_size(parser.static_field_size()),
537 _nonstatic_oop_map_size(nonstatic_oop_map_size(parser.total_oop_map_count())),
538 _itable_len(parser.itable_size()),
539 _nest_host_index(0),
540 _init_state(allocated),
541 _reference_type(reference_type),
542 _init_thread(nullptr),
543 _hash_offset(parser.hash_offset())
544 {
545 set_vtable_length(parser.vtable_size());
546 set_access_flags(parser.access_flags());
547 if (parser.is_hidden()) set_is_hidden();
548 set_layout_helper(Klass::instance_layout_helper(parser.layout_size(),
549 false));
550
551 assert(nullptr == _methods, "underlying memory not zeroed?");
552 assert(is_instance_klass(), "is layout incorrect?");
553 assert(size_helper() == parser.layout_size(), "incorrect size_helper?");
554 }
555
556 void InstanceKlass::deallocate_methods(ClassLoaderData* loader_data,
557 Array<Method*>* methods) {
558 if (methods != nullptr && methods != Universe::the_empty_method_array() &&
559 !methods->in_aot_cache()) {
560 for (int i = 0; i < methods->length(); i++) {
561 Method* method = methods->at(i);
562 if (method == nullptr) continue; // maybe null if error processing
563 // Only want to delete methods that are not executing for RedefineClasses.
3837 _st->cr();
3838 }
3839 }
3840
3841
3842 void InstanceKlass::oop_print_on(oop obj, outputStream* st) {
3843 Klass::oop_print_on(obj, st);
3844
3845 if (this == vmClasses::String_klass()) {
3846 typeArrayOop value = java_lang_String::value(obj);
3847 juint length = java_lang_String::length(obj);
3848 if (value != nullptr &&
3849 value->is_typeArray() &&
3850 length <= (juint) value->length()) {
3851 st->print(BULLET"string: ");
3852 java_lang_String::print(obj, st);
3853 st->cr();
3854 }
3855 }
3856
3857 st->print_cr(BULLET"---- fields (total size %zu words):", oop_size(obj, obj->mark()));
3858 FieldPrinter print_field(st, obj);
3859 print_nonstatic_fields(&print_field);
3860
3861 if (this == vmClasses::Class_klass()) {
3862 st->print(BULLET"signature: ");
3863 java_lang_Class::print_signature(obj, st);
3864 st->cr();
3865 Klass* real_klass = java_lang_Class::as_Klass(obj);
3866 if (real_klass != nullptr && real_klass->is_instance_klass()) {
3867 st->print_cr(BULLET"---- static fields (%d):", java_lang_Class::static_oop_field_count(obj));
3868 InstanceKlass::cast(real_klass)->do_local_static_fields(&print_field);
3869 }
3870 } else if (this == vmClasses::MethodType_klass()) {
3871 st->print(BULLET"signature: ");
3872 java_lang_invoke_MethodType::print_signature(obj, st);
3873 st->cr();
3874 }
3875 }
3876
3877 #ifndef PRODUCT
|