167 else if (is_class_loader(class_name, parser)) { 168 // class loader 169 ik = new (loader_data, size, THREAD) InstanceClassLoaderKlass(parser); 170 } 171 else { 172 // normal 173 ik = new (loader_data, size, THREAD) InstanceKlass(parser, InstanceKlass::_misc_kind_other); 174 } 175 } 176 else { 177 // reference 178 ik = new (loader_data, size, THREAD) InstanceRefKlass(parser); 179 } 180 181 // Check for pending exception before adding to the loader data and incrementing 182 // class count. Can get OOM here. 183 if (HAS_PENDING_EXCEPTION) { 184 return NULL; 185 } 186 187 assert(ik != NULL, "invariant"); 188 189 const bool publicize = !parser.is_internal(); 190 191 // Add all classes to our internal class loader list here, 192 // including classes in the bootstrap (NULL) class loader. 193 loader_data->add_class(ik, publicize); 194 return ik; 195 } 196 197 198 // copy method ordering from resource area to Metaspace 199 void InstanceKlass::copy_method_ordering(const intArray* m, TRAPS) { 200 if (m != NULL) { 201 // allocate a new array and copy contents (memcpy?) 202 _method_ordering = MetadataFactory::new_array<int>(class_loader_data(), m->length(), CHECK); 203 for (int i = 0; i < m->length(); i++) { 204 _method_ordering->at_put(i, m->at(i)); 205 } 206 } else { 207 _method_ordering = Universe::the_empty_int_array(); 208 } 209 } 210 211 // create a new array of vtable_indices for default methods 212 Array<int>* InstanceKlass::create_new_default_vtable_indices(int len, TRAPS) { 213 Array<int>* vtable_indices = MetadataFactory::new_array<int>(class_loader_data(), len, CHECK_NULL); | 167 else if (is_class_loader(class_name, parser)) { 168 // class loader 169 ik = new (loader_data, size, THREAD) InstanceClassLoaderKlass(parser); 170 } 171 else { 172 // normal 173 ik = new (loader_data, size, THREAD) InstanceKlass(parser, InstanceKlass::_misc_kind_other); 174 } 175 } 176 else { 177 // reference 178 ik = new (loader_data, size, THREAD) InstanceRefKlass(parser); 179 } 180 181 // Check for pending exception before adding to the loader data and incrementing 182 // class count. Can get OOM here. 183 if (HAS_PENDING_EXCEPTION) { 184 return NULL; 185 } 186 187 return ik; 188 } 189 190 191 // copy method ordering from resource area to Metaspace 192 void InstanceKlass::copy_method_ordering(const intArray* m, TRAPS) { 193 if (m != NULL) { 194 // allocate a new array and copy contents (memcpy?) 195 _method_ordering = MetadataFactory::new_array<int>(class_loader_data(), m->length(), CHECK); 196 for (int i = 0; i < m->length(); i++) { 197 _method_ordering->at_put(i, m->at(i)); 198 } 199 } else { 200 _method_ordering = Universe::the_empty_int_array(); 201 } 202 } 203 204 // create a new array of vtable_indices for default methods 205 Array<int>* InstanceKlass::create_new_default_vtable_indices(int len, TRAPS) { 206 Array<int>* vtable_indices = MetadataFactory::new_array<int>(class_loader_data(), len, CHECK_NULL); |