The problematic function, in src/share/vm/oops/arrayOop.hpp
// The _length field is not declared in C++. It is allocated after the
// declared nonstatic fields in arrayOopDesc if not compressed, otherwise
// it occupies the second half of the _klass field in oopDesc.
static int length_offset_in_bytes() {
return UseCompressedOops ? klass_gap_offset_in_bytes() :
sizeof(arrayOopDesc);
}