--- old/src/share/vm/ci/ciEnv.cpp 2017-01-09 14:53:20.482909189 +0100 +++ new/src/share/vm/ci/ciEnv.cpp 2017-01-09 14:53:20.370909194 +0100 @@ -443,7 +443,7 @@ // to be loaded if their element klasses are loaded, except when memory // is exhausted. if (sym->byte_at(0) == '[' && - (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L')) { + (sym->byte_at(1) == '[' || sym->byte_at(1) == 'L' || sym->byte_at(1) == 'Q')) { // We have an unloaded array. // Build it on the fly if the element class exists. TempNewSymbol elem_sym = SymbolTable::new_symbol(sym->as_utf8()+1, @@ -458,7 +458,11 @@ require_local); if (elem_klass != NULL && elem_klass->is_loaded()) { // Now make an array for it - return ciObjArrayKlass::make_impl(elem_klass); + if (elem_klass->is_valuetype() && elem_klass->as_value_klass()->flatten_array()) { + return ciValueArrayKlass::make_impl(elem_klass); + } else { + return ciObjArrayKlass::make_impl(elem_klass); + } } }