< prev index next >
src/share/vm/runtime/sharedRuntime.cpp
Print this page
@@ -1372,14 +1372,10 @@
if (is_virtual) {
Klass* receiver_klass = NULL;
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();
}
bool static_bound = call_info.resolved_method()->can_be_statically_bound();
@@ -3046,20 +3042,21 @@
case 'I': sig_bt[cnt++] = T_INT; break;
case 'J': sig_bt[cnt++] = T_LONG; sig_bt[cnt++] = T_VOID; break;
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;
break;
case '[': { // Array
do { // Skip optional size
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;
}
default : ShouldNotReachHere();
< prev index next >