equal
deleted
inserted
replaced
333 |
333 |
334 JRT_ENTRY(void, Runtime1::new_instance(JavaThread* thread, Klass* klass)) |
334 JRT_ENTRY(void, Runtime1::new_instance(JavaThread* thread, Klass* klass)) |
335 NOT_PRODUCT(_new_instance_slowcase_cnt++;) |
335 NOT_PRODUCT(_new_instance_slowcase_cnt++;) |
336 |
336 |
337 assert(klass->is_klass(), "not a class"); |
337 assert(klass->is_klass(), "not a class"); |
|
338 Handle holder(THREAD, klass->klass_holder()); // keep the klass alive |
338 instanceKlassHandle h(thread, klass); |
339 instanceKlassHandle h(thread, klass); |
339 h->check_valid_for_instantiation(true, CHECK); |
340 h->check_valid_for_instantiation(true, CHECK); |
340 // make sure klass is initialized |
341 // make sure klass is initialized |
341 h->initialize(CHECK); |
342 h->initialize(CHECK); |
342 // allocate instance and return via TLS |
343 // allocate instance and return via TLS |
368 |
369 |
369 // Note: no handle for klass needed since they are not used |
370 // Note: no handle for klass needed since they are not used |
370 // anymore after new_objArray() and no GC can happen before. |
371 // anymore after new_objArray() and no GC can happen before. |
371 // (This may have to change if this code changes!) |
372 // (This may have to change if this code changes!) |
372 assert(array_klass->is_klass(), "not a class"); |
373 assert(array_klass->is_klass(), "not a class"); |
|
374 Handle holder(THREAD, array_klass->klass_holder()); // keep the klass alive |
373 Klass* elem_klass = ObjArrayKlass::cast(array_klass)->element_klass(); |
375 Klass* elem_klass = ObjArrayKlass::cast(array_klass)->element_klass(); |
374 objArrayOop obj = oopFactory::new_objArray(elem_klass, length, CHECK); |
376 objArrayOop obj = oopFactory::new_objArray(elem_klass, length, CHECK); |
375 thread->set_vm_result(obj); |
377 thread->set_vm_result(obj); |
376 // This is pretty rare but this runtime patch is stressful to deoptimization |
378 // This is pretty rare but this runtime patch is stressful to deoptimization |
377 // if we deoptimize here so force a deopt to stress the path. |
379 // if we deoptimize here so force a deopt to stress the path. |
384 JRT_ENTRY(void, Runtime1::new_multi_array(JavaThread* thread, Klass* klass, int rank, jint* dims)) |
386 JRT_ENTRY(void, Runtime1::new_multi_array(JavaThread* thread, Klass* klass, int rank, jint* dims)) |
385 NOT_PRODUCT(_new_multi_array_slowcase_cnt++;) |
387 NOT_PRODUCT(_new_multi_array_slowcase_cnt++;) |
386 |
388 |
387 assert(klass->is_klass(), "not a class"); |
389 assert(klass->is_klass(), "not a class"); |
388 assert(rank >= 1, "rank must be nonzero"); |
390 assert(rank >= 1, "rank must be nonzero"); |
|
391 Handle holder(THREAD, klass->klass_holder()); // keep the klass alive |
389 oop obj = ArrayKlass::cast(klass)->multi_allocate(rank, dims, CHECK); |
392 oop obj = ArrayKlass::cast(klass)->multi_allocate(rank, dims, CHECK); |
390 thread->set_vm_result(obj); |
393 thread->set_vm_result(obj); |
391 JRT_END |
394 JRT_END |
392 |
395 |
393 |
396 |