<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 11/04/2013 07:12 PM,
      <a class="moz-txt-link-abbreviated" href="mailto:robert.field@oracle.com">robert.field@oracle.com</a> wrote:<br>
    </div>
    <blockquote cite="mid:20131104181255.459946297B@hg.openjdk.java.net"
      type="cite">
      <pre wrap="">Changeset: 51b002381b35
Author:    rfield
Date:      2013-11-04 10:12 -0800
URL:       <a class="moz-txt-link-freetext" href="http://hg.openjdk.java.net/jdk8/tl/jdk/rev/51b002381b35">http://hg.openjdk.java.net/jdk8/tl/jdk/rev/51b002381b35</a>

7194897: JSR 292: Cannot create more than 16 instances of an anonymous class
8027681: Lambda serialization fails once reflection proxy generation kicks in
Reviewed-by: ksrini, briangoetz, jfranck
Contributed-by: <a class="moz-txt-link-abbreviated" href="mailto:joel.franck@oracle.com">joel.franck@oracle.com</a>, <a class="moz-txt-link-abbreviated" href="mailto:brian.goetz@oracle.com">brian.goetz@oracle.com</a>, <a class="moz-txt-link-abbreviated" href="mailto:robert.field@oracle.com">robert.field@oracle.com</a>

! src/share/classes/sun/reflect/NativeConstructorAccessorImpl.java
! src/share/classes/sun/reflect/NativeMethodAccessorImpl.java
! src/share/classes/sun/reflect/misc/ReflectUtil.java
+ test/java/lang/invoke/lambda/RepetitiveLambdaSerialization.java
! test/java/util/stream/test/org/openjdk/tests/java/lang/invoke/SerializedLambdaTest.java
+ test/sun/reflect/AnonymousNewInstance/ManyNewInstanceAnonTest.java

</pre>
    </blockquote>
    Hi Robert,<br>
    <br>
    I also propose a much faster variant of:<br>
    <br>
    <div style="color:#008800;">+ /**
    </div>
    <div style="color:#008800;">+ * Checks if {@code Class cls} is a
      VM-anonymous class
    </div>
    <div style="color:#008800;">+ * as defined by {@link
      sun.misc.Unsafe#defineAnonymousClass}
    </div>
    <div style="color:#008800;">+ * (not to be confused with a Java
      Language anonymous inner class).
    </div>
    <div style="color:#008800;">+ */
    </div>
    <div style="color:#008800;">+ public static boolean
      isVMAnonymousClass(Class<?> cls) {
    </div>
    <div style="color:#008800;">+ return
      cls.getSimpleName().contains("/");
    </div>
    <div style="color:#008800;">+ }
    </div>
    <br>
    <br>
    The following:<br>
    <br>
        public static boolean isVMAnonymousClassFAST(Class<?> cls)
    {<br>
            String name = cls.getName();<br>
            for (int i = name.length() - 1; i >= 0; i--) {<br>
                char c = name.charAt(i);<br>
                if (c == '.') return false;<br>
                if (c == '/') return true;<br>
            }<br>
            return false; // root package<br>
        }<br>
    <br>
    It's about 12..25x faster for typical class names and doesn't
    produce any garbage.<br>
    <br>
    <br>
    Regards, Peter<br>
    <br>
  </body>
</html>