85 86 return new (loader_data, size, THREAD) TypeArrayKlass(type, name); 87 } 88 89 TypeArrayKlass::TypeArrayKlass(BasicType type, Symbol* name) : ArrayKlass(name) { 90 set_layout_helper(array_layout_helper(type)); 91 assert(is_array_klass(), "sanity"); 92 assert(is_typeArray_klass(), "sanity"); 93 94 set_max_length(arrayOopDesc::max_array_length(type)); 95 assert(size() >= TypeArrayKlass::header_size(), "bad size"); 96 97 set_class_loader_data(ClassLoaderData::the_null_class_loader_data()); 98 } 99 100 typeArrayOop TypeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) { 101 assert(log2_element_size() >= 0, "bad scale"); 102 if (length >= 0) { 103 if (length <= max_length()) { 104 size_t size = typeArrayOopDesc::object_size(layout_helper(), length); 105 KlassHandle h_k(THREAD, this); 106 typeArrayOop t; 107 CollectedHeap* ch = Universe::heap(); 108 if (do_zero) { 109 t = (typeArrayOop)CollectedHeap::array_allocate(h_k, (int)size, length, CHECK_NULL); 110 } else { 111 t = (typeArrayOop)CollectedHeap::array_allocate_nozero(h_k, (int)size, length, CHECK_NULL); 112 } 113 return t; 114 } else { 115 report_java_out_of_memory("Requested array size exceeds VM limit"); 116 JvmtiExport::post_array_size_exhausted(); 117 THROW_OOP_0(Universe::out_of_memory_error_array_size()); 118 } 119 } else { 120 THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); 121 } 122 } 123 124 oop TypeArrayKlass::multi_allocate(int rank, jint* last_size, TRAPS) { 125 // For typeArrays this is only called for the last dimension 126 assert(rank == 1, "just checking"); 127 int length = *last_size; 128 return allocate(length, THREAD); 129 } 130 131 | 85 86 return new (loader_data, size, THREAD) TypeArrayKlass(type, name); 87 } 88 89 TypeArrayKlass::TypeArrayKlass(BasicType type, Symbol* name) : ArrayKlass(name) { 90 set_layout_helper(array_layout_helper(type)); 91 assert(is_array_klass(), "sanity"); 92 assert(is_typeArray_klass(), "sanity"); 93 94 set_max_length(arrayOopDesc::max_array_length(type)); 95 assert(size() >= TypeArrayKlass::header_size(), "bad size"); 96 97 set_class_loader_data(ClassLoaderData::the_null_class_loader_data()); 98 } 99 100 typeArrayOop TypeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) { 101 assert(log2_element_size() >= 0, "bad scale"); 102 if (length >= 0) { 103 if (length <= max_length()) { 104 size_t size = typeArrayOopDesc::object_size(layout_helper(), length); 105 typeArrayOop t; 106 CollectedHeap* ch = Universe::heap(); 107 if (do_zero) { 108 t = (typeArrayOop)CollectedHeap::array_allocate(this, (int)size, length, CHECK_NULL); 109 } else { 110 t = (typeArrayOop)CollectedHeap::array_allocate_nozero(this, (int)size, length, CHECK_NULL); 111 } 112 return t; 113 } else { 114 report_java_out_of_memory("Requested array size exceeds VM limit"); 115 JvmtiExport::post_array_size_exhausted(); 116 THROW_OOP_0(Universe::out_of_memory_error_array_size()); 117 } 118 } else { 119 THROW_0(vmSymbols::java_lang_NegativeArraySizeException()); 120 } 121 } 122 123 oop TypeArrayKlass::multi_allocate(int rank, jint* last_size, TRAPS) { 124 // For typeArrays this is only called for the last dimension 125 assert(rank == 1, "just checking"); 126 int length = *last_size; 127 return allocate(length, THREAD); 128 } 129 130 |