< prev index next >

src/hotspot/share/oops/arrayKlass.cpp

Print this page
rev 50282 : 8203881: Print errornous size in NegativeArraySizeException


 113 
 114 GrowableArray<Klass*>* ArrayKlass::compute_secondary_supers(int num_extra_slots,
 115                                                             Array<Klass*>* transitive_interfaces) {
 116   // interfaces = { cloneable_klass, serializable_klass };
 117   assert(num_extra_slots == 0, "sanity of primitive array type");
 118   assert(transitive_interfaces == NULL, "sanity");
 119   // Must share this for correct bootstrapping!
 120   set_secondary_supers(Universe::the_array_interfaces_array());
 121   return NULL;
 122 }
 123 
 124 bool ArrayKlass::compute_is_subtype_of(Klass* k) {
 125   // An array is a subtype of Serializable, Clonable, and Object
 126   return    k == SystemDictionary::Object_klass()
 127          || k == SystemDictionary::Cloneable_klass()
 128          || k == SystemDictionary::Serializable_klass();
 129 }
 130 
 131 objArrayOop ArrayKlass::allocate_arrayArray(int n, int length, TRAPS) {
 132   if (length < 0) {
 133     THROW_0(vmSymbols::java_lang_NegativeArraySizeException());



 134   }
 135   if (length > arrayOopDesc::max_array_length(T_ARRAY)) {
 136     report_java_out_of_memory("Requested array size exceeds VM limit");
 137     JvmtiExport::post_array_size_exhausted();
 138     THROW_OOP_0(Universe::out_of_memory_error_array_size());
 139   }
 140   int size = objArrayOopDesc::object_size(length);
 141   Klass* k = array_klass(n+dimension(), CHECK_0);
 142   ArrayKlass* ak = ArrayKlass::cast(k);
 143   objArrayOop o =
 144     (objArrayOop)CollectedHeap::array_allocate(ak, size, length, CHECK_0);
 145   // initialization to NULL not necessary, area already cleared
 146   return o;
 147 }
 148 
 149 void ArrayKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) {
 150   Klass* k = this;
 151   // Iterate over this array klass and all higher dimensions
 152   while (k != NULL) {
 153     f(k, CHECK);




 113 
 114 GrowableArray<Klass*>* ArrayKlass::compute_secondary_supers(int num_extra_slots,
 115                                                             Array<Klass*>* transitive_interfaces) {
 116   // interfaces = { cloneable_klass, serializable_klass };
 117   assert(num_extra_slots == 0, "sanity of primitive array type");
 118   assert(transitive_interfaces == NULL, "sanity");
 119   // Must share this for correct bootstrapping!
 120   set_secondary_supers(Universe::the_array_interfaces_array());
 121   return NULL;
 122 }
 123 
 124 bool ArrayKlass::compute_is_subtype_of(Klass* k) {
 125   // An array is a subtype of Serializable, Clonable, and Object
 126   return    k == SystemDictionary::Object_klass()
 127          || k == SystemDictionary::Cloneable_klass()
 128          || k == SystemDictionary::Serializable_klass();
 129 }
 130 
 131 objArrayOop ArrayKlass::allocate_arrayArray(int n, int length, TRAPS) {
 132   if (length < 0) {
 133     ResourceMark rm(THREAD);
 134     stringStream ss;
 135     ss.print("%d", length);
 136     THROW_MSG_0(vmSymbols::java_lang_NegativeArraySizeException(), ss.as_string());
 137   }
 138   if (length > arrayOopDesc::max_array_length(T_ARRAY)) {
 139     report_java_out_of_memory("Requested array size exceeds VM limit");
 140     JvmtiExport::post_array_size_exhausted();
 141     THROW_OOP_0(Universe::out_of_memory_error_array_size());
 142   }
 143   int size = objArrayOopDesc::object_size(length);
 144   Klass* k = array_klass(n+dimension(), CHECK_0);
 145   ArrayKlass* ak = ArrayKlass::cast(k);
 146   objArrayOop o =
 147     (objArrayOop)CollectedHeap::array_allocate(ak, size, length, CHECK_0);
 148   // initialization to NULL not necessary, area already cleared
 149   return o;
 150 }
 151 
 152 void ArrayKlass::array_klasses_do(void f(Klass* k, TRAPS), TRAPS) {
 153   Klass* k = this;
 154   // Iterate over this array klass and all higher dimensions
 155   while (k != NULL) {
 156     f(k, CHECK);


< prev index next >