885 // Class_klass has to be loaded because it is used to allocate 886 // the mirror. 887 if (SystemDictionary::Class_klass_loaded()) { 888 // Allocate mirror (java.lang.Class instance) 889 oop mirror_oop = InstanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK); 890 Handle mirror(THREAD, mirror_oop); 891 Handle comp_mirror; 892 893 // Setup indirection from mirror->klass 894 java_lang_Class::set_klass(mirror(), k); 895 896 InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(mirror->klass()); 897 assert(oop_size(mirror()) == mk->instance_size(k), "should have been set"); 898 899 java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror())); 900 901 // It might also have a component mirror. This mirror must already exist. 902 if (k->is_array_klass()) { 903 if (k->is_valueArray_klass()) { 904 Klass* element_klass = (Klass*) ValueArrayKlass::cast(k)->element_klass(); 905 if (element_klass->is_value()) { 906 ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(element_klass)); 907 comp_mirror = Handle(THREAD, vk->value_mirror()); 908 } else { 909 comp_mirror = Handle(THREAD, element_klass->java_mirror()); 910 } 911 } 912 else if (k->is_typeArray_klass()) { 913 BasicType type = TypeArrayKlass::cast(k)->element_type(); 914 comp_mirror = Handle(THREAD, Universe::java_mirror(type)); 915 } else { 916 assert(k->is_objArray_klass(), "Must be"); 917 Klass* element_klass = ObjArrayKlass::cast(k)->element_klass(); 918 assert(element_klass != NULL, "Must have an element klass"); 919 if (element_klass->is_value()) { 920 ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(element_klass)); 921 comp_mirror = Handle(THREAD, vk->value_mirror()); 922 } else { 923 comp_mirror = Handle(THREAD, element_klass->java_mirror()); 924 } 925 } 926 assert(comp_mirror() != NULL, "must have a mirror"); 927 928 // Two-way link between the array klass and its component mirror: 929 // (array_klass) k -> mirror -> component_mirror -> array_klass -> k 930 set_component_mirror(mirror(), comp_mirror()); 931 // See below for ordering dependencies between field array_klass in component mirror 932 // and java_mirror in this klass. 933 } else { 934 assert(k->is_instance_klass(), "Must be"); 935 936 initialize_mirror_fields(k, mirror, protection_domain, THREAD); 937 if (HAS_PENDING_EXCEPTION) { 938 // If any of the fields throws an exception like OOM remove the klass field 939 // from the mirror so GC doesn't follow it after the klass has been deallocated. | 885 // Class_klass has to be loaded because it is used to allocate 886 // the mirror. 887 if (SystemDictionary::Class_klass_loaded()) { 888 // Allocate mirror (java.lang.Class instance) 889 oop mirror_oop = InstanceMirrorKlass::cast(SystemDictionary::Class_klass())->allocate_instance(k, CHECK); 890 Handle mirror(THREAD, mirror_oop); 891 Handle comp_mirror; 892 893 // Setup indirection from mirror->klass 894 java_lang_Class::set_klass(mirror(), k); 895 896 InstanceMirrorKlass* mk = InstanceMirrorKlass::cast(mirror->klass()); 897 assert(oop_size(mirror()) == mk->instance_size(k), "should have been set"); 898 899 java_lang_Class::set_static_oop_field_count(mirror(), mk->compute_static_oop_field_count(mirror())); 900 901 // It might also have a component mirror. This mirror must already exist. 902 if (k->is_array_klass()) { 903 if (k->is_valueArray_klass()) { 904 Klass* element_klass = (Klass*) ValueArrayKlass::cast(k)->element_klass(); 905 assert(element_klass->is_value(), "Must be value type component"); 906 ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(element_klass)); 907 comp_mirror = Handle(THREAD, vk->value_mirror()); 908 } 909 else if (k->is_typeArray_klass()) { 910 BasicType type = TypeArrayKlass::cast(k)->element_type(); 911 comp_mirror = Handle(THREAD, Universe::java_mirror(type)); 912 } else { 913 assert(k->is_objArray_klass(), "Must be"); 914 Klass* element_klass = ObjArrayKlass::cast(k)->element_klass(); 915 assert(element_klass != NULL, "Must have an element klass"); 916 if (element_klass->is_value() && k->name()->is_Q_array_signature()) { 917 ValueKlass* vk = ValueKlass::cast(InstanceKlass::cast(element_klass)); 918 comp_mirror = Handle(THREAD, vk->value_mirror()); 919 } else { 920 comp_mirror = Handle(THREAD, element_klass->java_mirror()); 921 } 922 } 923 assert(comp_mirror() != NULL, "must have a mirror"); 924 925 // Two-way link between the array klass and its component mirror: 926 // (array_klass) k -> mirror -> component_mirror -> array_klass -> k 927 set_component_mirror(mirror(), comp_mirror()); 928 // See below for ordering dependencies between field array_klass in component mirror 929 // and java_mirror in this klass. 930 } else { 931 assert(k->is_instance_klass(), "Must be"); 932 933 initialize_mirror_fields(k, mirror, protection_domain, THREAD); 934 if (HAS_PENDING_EXCEPTION) { 935 // If any of the fields throws an exception like OOM remove the klass field 936 // from the mirror so GC doesn't follow it after the klass has been deallocated. |