52 // Allocation... 53 54 ValueArrayKlass::ValueArrayKlass(Klass* element_klass, Symbol* name) : ArrayKlass(name) { 55 assert(element_klass->is_value(), "Expected Value"); 56 57 set_element_klass(ValueKlass::cast(element_klass)); 58 set_class_loader_data(element_klass->class_loader_data()); 59 set_layout_helper(array_layout_helper(ValueKlass::cast(element_klass))); 60 61 assert(is_array_klass(), "sanity"); 62 assert(is_valueArray_klass(), "sanity"); 63 64 CMH("tweak name symbol refcnt ?") 65 #ifndef PRODUCT 66 if (PrintValueArrayLayout) { 67 print(); 68 } 69 #endif 70 } 71 72 void ValueArrayKlass::set_element_klass(ValueKlass* k) { 73 _element_klass = k; 74 } 75 76 ValueArrayKlass* ValueArrayKlass::allocate_klass(Klass* element_klass, 77 Symbol* name, 78 TRAPS) { 79 assert(ValueArrayFlatten, "Flatten array not allowed"); 80 assert(ValueKlass::cast(element_klass)->is_atomic() || (!ValueArrayAtomicAccess), "Atomic by-default"); 81 82 ClassLoaderData* loader_data = element_klass->class_loader_data(); 83 int size = ArrayKlass::static_size(ValueArrayKlass::header_size()); 84 ValueArrayKlass* vak = new (loader_data, size, THREAD) ValueArrayKlass(element_klass, name); 85 if (vak == NULL) { 86 return NULL; 87 } 88 loader_data->add_class(vak); 89 complete_create_array_klass(vak, vak->super(), vak->module(), CHECK_NULL); 90 return vak; 91 } 92 93 ValueArrayKlass* ValueArrayKlass::allocate_klass(Klass* element_klass, TRAPS) { 94 Symbol* name = ArrayKlass::create_element_klass_array_name(element_klass, CHECK_NULL); 95 return allocate_klass(element_klass, name, THREAD); 96 } 97 98 void ValueArrayKlass::initialize(TRAPS) { 99 element_klass()->initialize(THREAD); | 52 // Allocation... 53 54 ValueArrayKlass::ValueArrayKlass(Klass* element_klass, Symbol* name) : ArrayKlass(name) { 55 assert(element_klass->is_value(), "Expected Value"); 56 57 set_element_klass(ValueKlass::cast(element_klass)); 58 set_class_loader_data(element_klass->class_loader_data()); 59 set_layout_helper(array_layout_helper(ValueKlass::cast(element_klass))); 60 61 assert(is_array_klass(), "sanity"); 62 assert(is_valueArray_klass(), "sanity"); 63 64 CMH("tweak name symbol refcnt ?") 65 #ifndef PRODUCT 66 if (PrintValueArrayLayout) { 67 print(); 68 } 69 #endif 70 } 71 72 ValueKlass* ValueArrayKlass::element_klass() const { 73 return ValueKlass::cast(_element_klass); 74 } 75 76 void ValueArrayKlass::set_element_klass(Klass* k) { 77 _element_klass = k; 78 } 79 80 ValueArrayKlass* ValueArrayKlass::allocate_klass(Klass* element_klass, 81 Symbol* name, 82 TRAPS) { 83 assert(ValueArrayFlatten, "Flatten array required"); 84 assert(ValueKlass::cast(element_klass)->is_atomic() || (!ValueArrayAtomicAccess), "Atomic by-default"); 85 86 ClassLoaderData* loader_data = element_klass->class_loader_data(); 87 int size = ArrayKlass::static_size(ValueArrayKlass::header_size()); 88 ValueArrayKlass* vak = new (loader_data, size, THREAD) ValueArrayKlass(element_klass, name); 89 if (vak == NULL) { 90 return NULL; 91 } 92 loader_data->add_class(vak); 93 complete_create_array_klass(vak, vak->super(), vak->module(), CHECK_NULL); 94 return vak; 95 } 96 97 ValueArrayKlass* ValueArrayKlass::allocate_klass(Klass* element_klass, TRAPS) { 98 Symbol* name = ArrayKlass::create_element_klass_array_name(element_klass, CHECK_NULL); 99 return allocate_klass(element_klass, name, THREAD); 100 } 101 102 void ValueArrayKlass::initialize(TRAPS) { 103 element_klass()->initialize(THREAD); |