< prev index next >

src/hotspot/share/classfile/stackMapFrame.cpp

Print this page
rev 54022 : 8220366: Optimize Symbol handling in ClassVerifier and SignatureStream
Reviewed-by: TBD

@@ -101,17 +101,20 @@
   switch (ss.type()) {
     case T_OBJECT:
     case T_ARRAY:
     {
       Symbol* sig = ss.as_symbol(CHECK_(VerificationType::bogus_type()));
+      if (!sig->is_permanent()) {
       // Create another symbol to save as signature stream unreferences
       // this symbol.
-      Symbol* sig_copy =
+        Symbol *sig_copy =
         verifier()->create_temporary_symbol(sig, 0, sig->utf8_length(),
                                  CHECK_(VerificationType::bogus_type()));
       assert(sig_copy == sig, "symbols don't match");
-      return VerificationType::reference_type(sig_copy);
+        sig = sig_copy;
+      }
+      return VerificationType::reference_type(sig);
     }
     case T_INT:     return VerificationType::integer_type();
     case T_BYTE:    return VerificationType::byte_type();
     case T_CHAR:    return VerificationType::char_type();
     case T_SHORT:   return VerificationType::short_type();
< prev index next >