--- old/src/share/vm/runtime/sharedRuntime.cpp 2017-06-21 13:07:30.662590534 +0200 +++ new/src/share/vm/runtime/sharedRuntime.cpp 2017-06-21 13:07:30.582590531 +0200 @@ -1374,10 +1374,6 @@ if (ValueTypePassFieldsAsArgs && callee_method->method_holder()->is_value()) { // If the receiver is a value type that is passed as fields, no oop is available receiver_klass = callee_method->method_holder(); - if (FullGCALotWithValueTypes) { - // Trigger a full GC to verify that the GC knows about the contents of oop fields - Universe::heap()->collect(GCCause::_full_gc_alot); - } } else { assert(receiver.not_null() || invoke_code == Bytecodes::_invokehandle, "sanity check"); receiver_klass = invoke_code == Bytecodes::_invokehandle ? NULL : receiver->klass(); @@ -3048,6 +3044,7 @@ case 'S': sig_bt[cnt++] = T_SHORT; break; case 'Z': sig_bt[cnt++] = T_BOOLEAN; break; case 'V': sig_bt[cnt++] = T_VOID; break; + case 'Q': case 'L': // Oop while (*s++ != ';'); // Skip signature sig_bt[cnt++] = T_OBJECT; @@ -3057,7 +3054,7 @@ while (*s >= '0' && *s <= '9') s++; } while (*s++ == '['); // Nested arrays? // Skip element type - if (s[-1] == 'L') + if (s[-1] == 'L' || s[-1] == 'Q') while (*s++ != ';'); // Skip signature sig_bt[cnt++] = T_ARRAY; break;