< prev index next >
src/share/vm/oops/valueArrayKlass.cpp
Print this page
*** 87,99 ****
Symbol* name = ArrayKlass::create_element_klass_array_name(element_klass, CHECK_NULL);
return allocate_klass(element_klass, name, THREAD);
}
// Oops allocation...
! valueArrayOop ValueArrayKlass::allocate_array(int length,
! bool do_zero,
! TRAPS) {
CMH("this is virtually identical in all arrayKlasses, refactor")
if (length < 0) {
THROW_0(vmSymbols::java_lang_NegativeArraySizeException());
}
if (length > max_elements()) {
--- 87,97 ----
Symbol* name = ArrayKlass::create_element_klass_array_name(element_klass, CHECK_NULL);
return allocate_klass(element_klass, name, THREAD);
}
// Oops allocation...
! oop ValueArrayKlass::allocate(int length, bool do_zero, TRAPS) {
CMH("this is virtually identical in all arrayKlasses, refactor")
if (length < 0) {
THROW_0(vmSymbols::java_lang_NegativeArraySizeException());
}
if (length > max_elements()) {
*** 102,127 ****
THROW_OOP_0(Universe::out_of_memory_error_array_size());
}
size_t size = valueArrayOopDesc::object_size(layout_helper(), length);
KlassHandle h_k(THREAD, this);
- valueArrayOop array;
- CollectedHeap* ch = Universe::heap();
if (do_zero) {
! array = (valueArrayOop)CollectedHeap::array_allocate(h_k, (int)size, length, CHECK_NULL);
} else {
! array = (valueArrayOop)CollectedHeap::array_allocate_nozero(h_k, (int)size, length, CHECK_NULL);
}
- return array;
}
oop ValueArrayKlass::multi_allocate(int rank, jint* last_size, TRAPS) {
// For valueArrays this is only called for the last dimension
assert(rank == 1, "just checking");
int length = *last_size;
! return allocate_array(length, true, THREAD);
}
jint ValueArrayKlass::array_layout_helper(ValueKlass* vk) {
BasicType etype = T_VALUETYPE;
int atag = _lh_array_tag_type_value;
--- 100,122 ----
THROW_OOP_0(Universe::out_of_memory_error_array_size());
}
size_t size = valueArrayOopDesc::object_size(layout_helper(), length);
KlassHandle h_k(THREAD, this);
if (do_zero) {
! return CollectedHeap::array_allocate(h_k, (int)size, length, CHECK_NULL);
} else {
! return CollectedHeap::array_allocate_nozero(h_k, (int)size, length, CHECK_NULL);
}
}
oop ValueArrayKlass::multi_allocate(int rank, jint* last_size, TRAPS) {
// For valueArrays this is only called for the last dimension
assert(rank == 1, "just checking");
int length = *last_size;
! return allocate(length, true, THREAD);
}
jint ValueArrayKlass::array_layout_helper(ValueKlass* vk) {
BasicType etype = T_VALUETYPE;
int atag = _lh_array_tag_type_value;
*** 130,140 ****
int lh = (atag << _lh_array_tag_shift)
| (1 << _lh_valuetype_bit)
| (hsize << _lh_header_size_shift)
| ((int)etype << _lh_element_type_shift)
! | (esize);
#ifdef DEBUG
assert(lh < (int)_lh_neutral_value, "must look like an array layout");
assert(layout_helper_is_array(lh), "correct kind");
assert(layout_helper_is_valueArray(lh), "correct kind");
--- 125,135 ----
int lh = (atag << _lh_array_tag_shift)
| (1 << _lh_valuetype_bit)
| (hsize << _lh_header_size_shift)
| ((int)etype << _lh_element_type_shift)
! | ((esize) << _lh_log2_element_size_shift);
#ifdef DEBUG
assert(lh < (int)_lh_neutral_value, "must look like an array layout");
assert(layout_helper_is_array(lh), "correct kind");
assert(layout_helper_is_valueArray(lh), "correct kind");
*** 258,272 ****
#ifndef PRODUCT
void ValueArrayKlass::oop_print_on(oop obj, outputStream* st) {
ArrayKlass::oop_print_on(obj, st);
valueArrayOop va = valueArrayOop(obj);
int print_len = MIN2((intx) va->length(), MaxElementPrintSize);
for(int index = 0; index < print_len; index++) {
! st->print(" - %3d : ", index);
! CMH("CMH: helper method for valueOop/valorind printing")
! st->print(" CMH: helper method for valueOop/valorind printing");
st->cr();
}
int remaining = va->length() - print_len;
if (remaining > 0) {
st->print_cr(" - <%d more elements, increase MaxElementPrintSize to print>", remaining);
--- 253,269 ----
#ifndef PRODUCT
void ValueArrayKlass::oop_print_on(oop obj, outputStream* st) {
ArrayKlass::oop_print_on(obj, st);
valueArrayOop va = valueArrayOop(obj);
+ ValueKlass* vk = element_klass();
int print_len = MIN2((intx) va->length(), MaxElementPrintSize);
for(int index = 0; index < print_len; index++) {
! st->print_cr(" - %d : ", index);
! oop obj = (oop) ((uintptr_t)va->value_at_addr(index, layout_helper()) - vk->first_field_offset());
! FieldPrinter print_field(st, obj);
! vk->do_nonstatic_fields(&print_field);
st->cr();
}
int remaining = va->length() - print_len;
if (remaining > 0) {
st->print_cr(" - <%d more elements, increase MaxElementPrintSize to print>", remaining);
< prev index next >