< prev index next >

src/hotspot/share/oops/objArrayKlass.cpp

Print this page
@@ -140,16 +140,17 @@
    set_layout_helper(array_layout_helper(T_OBJECT));
    assert(is_array_klass(), "sanity");
    assert(is_objArray_klass(), "sanity");
  }
  
- size_t ObjArrayKlass::oop_size(oop obj) const {
+ size_t ObjArrayKlass::oop_size(oop obj, markWord mark) const {
    // In this assert, we cannot safely access the Klass* with compact headers,
    // because size_given_klass() calls oop_size() on objects that might be
    // concurrently forwarded, which would overwrite the Klass*.
    assert(UseCompactObjectHeaders || obj->is_objArray(), "must be object array");
-   return objArrayOop(obj)->object_size();
+   int length = LP64_ONLY(UseCompactObjectHeaders ? mark.array_length() :) objArrayOop(obj)->length();
+   return objArrayOop(obj)->object_size(length);
  }
  
  objArrayOop ObjArrayKlass::allocate(int length, TRAPS) {
    check_array_allocation_length(length, arrayOopDesc::max_array_length(T_OBJECT), CHECK_NULL);
    size_t size = objArrayOopDesc::object_size(length);
< prev index next >