< 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 >