hotspot/src/share/vm/c1/c1_Runtime1.cpp
changeset 36616 5172e3dd60f2
parent 36508 5f9eee6b383b
parent 36603 0bc3ad031d60
child 38018 1dc6c6f21231
equal deleted inserted replaced
36615:c744e3b0f8c5 36616:5172e3dd60f2
   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