hotspot/src/share/vm/memory/oopFactory.cpp
changeset 13952 e3cf184080bc
parent 13728 882756847a04
child 30764 fec48bf5a827
equal deleted inserted replaced
13918:b01a48301e67 13952:e3cf184080bc
    45   }
    45   }
    46   return result;
    46   return result;
    47 }
    47 }
    48 
    48 
    49 typeArrayOop oopFactory::new_tenured_charArray(int length, TRAPS) {
    49 typeArrayOop oopFactory::new_tenured_charArray(int length, TRAPS) {
    50   return typeArrayKlass::cast(Universe::charArrayKlassObj())->allocate(length, THREAD);
    50   return TypeArrayKlass::cast(Universe::charArrayKlassObj())->allocate(length, THREAD);
    51 }
    51 }
    52 
    52 
    53 typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) {
    53 typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) {
    54   Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
    54   Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
    55   typeArrayKlass* type_asArrayKlass = typeArrayKlass::cast(type_asKlassOop);
    55   TypeArrayKlass* type_asArrayKlass = TypeArrayKlass::cast(type_asKlassOop);
    56   typeArrayOop result = type_asArrayKlass->allocate(length, THREAD);
    56   typeArrayOop result = type_asArrayKlass->allocate(length, THREAD);
    57   return result;
    57   return result;
    58 }
    58 }
    59 
    59 
    60 // Create a Java array that points to metadata.
    60 // Create a Java array that points to metadata.
    64 // Note:can't point to symbols because there's no way to unreference count
    64 // Note:can't point to symbols because there's no way to unreference count
    65 // them when this object goes away.
    65 // them when this object goes away.
    66 typeArrayOop oopFactory::new_metaDataArray(int length, TRAPS) {
    66 typeArrayOop oopFactory::new_metaDataArray(int length, TRAPS) {
    67   BasicType type = LP64_ONLY(T_LONG) NOT_LP64(T_INT);
    67   BasicType type = LP64_ONLY(T_LONG) NOT_LP64(T_INT);
    68   Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
    68   Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
    69   typeArrayKlass* type_asArrayKlass = typeArrayKlass::cast(type_asKlassOop);
    69   TypeArrayKlass* type_asArrayKlass = TypeArrayKlass::cast(type_asKlassOop);
    70   typeArrayOop result = type_asArrayKlass->allocate_common(length, true, THREAD);
    70   typeArrayOop result = type_asArrayKlass->allocate_common(length, true, THREAD);
    71   return result;
    71   return result;
    72 }
    72 }
    73 
    73 
    74 typeArrayOop oopFactory::new_typeArray_nozero(BasicType type, int length, TRAPS) {
    74 typeArrayOop oopFactory::new_typeArray_nozero(BasicType type, int length, TRAPS) {
    75   Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
    75   Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
    76   typeArrayKlass* type_asArrayKlass = typeArrayKlass::cast(type_asKlassOop);
    76   TypeArrayKlass* type_asArrayKlass = TypeArrayKlass::cast(type_asKlassOop);
    77   typeArrayOop result = type_asArrayKlass->allocate_common(length, false, THREAD);
    77   typeArrayOop result = type_asArrayKlass->allocate_common(length, false, THREAD);
    78   return result;
    78   return result;
    79 }
    79 }
    80 
    80 
    81 
    81 
    82 objArrayOop oopFactory::new_objArray(Klass* klass, int length, TRAPS) {
    82 objArrayOop oopFactory::new_objArray(Klass* klass, int length, TRAPS) {
    83   assert(klass->is_klass(), "must be instance class");
    83   assert(klass->is_klass(), "must be instance class");
    84   if (klass->oop_is_array()) {
    84   if (klass->oop_is_array()) {
    85     return ((arrayKlass*)klass)->allocate_arrayArray(1, length, THREAD);
    85     return ((ArrayKlass*)klass)->allocate_arrayArray(1, length, THREAD);
    86   } else {
    86   } else {
    87     assert (klass->oop_is_instance(), "new object array with klass not an InstanceKlass");
    87     assert (klass->oop_is_instance(), "new object array with klass not an InstanceKlass");
    88     return ((InstanceKlass*)klass)->allocate_objArray(1, length, THREAD);
    88     return ((InstanceKlass*)klass)->allocate_objArray(1, length, THREAD);
    89   }
    89   }
    90 }
    90 }