<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <br>
    <div class="moz-cite-prefix">On 11/05/2013 10:10 AM, Brian Goetz
      wrote:<br>
    </div>
    <blockquote
      cite="mid:8A0932AA-6460-4E9D-8C31-3B3D26A0F2DF@oracle.com"
      type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div>Ineexof(char) sounds like as fast and simpler?<br>
      </div>
      <!--[if !IE]></DIV><![endif]--></blockquote>
    <br>
    Well, indexOf(char) or lastIndexOf(char) searches for a single char.
    We can do better searching backwards for two chars at the same time.<br>
    <br>
    If the "name" of VM-anonymous class is always ending with pattern:
    "slash followed by some decimal digits" then the following would be
    even faster:<br>
    <br>
    <tt>     public static boolean isVMAnonymousClassFAST(Class<?>
      cls) {</tt><tt><br>
    </tt><tt>         String name = cls.getName();</tt><tt><br>
    </tt><tt>         for (int i = name.length() - 1; i >= 0; i--) {</tt><tt><br>
    </tt><tt>             char c = name.charAt(i);</tt><tt><br>
    </tt><tt>             if (c == '/') return true;</tt><tt><br>
    </tt><tt>            if (c < '0' || c > '9') return false;</tt><tt><br>
    </tt><tt>         }</tt><tt><br>
    </tt><tt>         return false;</tt><tt><br>
    </tt><tt>     }</tt><br>
    <br>
    Regards, Peter<br>
    <br>
    <blockquote
      cite="mid:8A0932AA-6460-4E9D-8C31-3B3D26A0F2DF@oracle.com"
      type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
      <div><br>
        Sent from my iPhone</div>
      <div><br>
        On Nov 5, 2013, at 8:55 AM, Peter Levart <<a
          moz-do-not-send="true" href="mailto:peter.levart@gmail.com">peter.levart@gmail.com</a>>
        wrote:<br>
        <br>
      </div>
      <blockquote type="cite"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
        <div>
          <meta content="text/html; charset=UTF-8"
            http-equiv="Content-Type">
          <div class="moz-cite-prefix">On 11/04/2013 07:12 PM, <a
              moz-do-not-send="true" 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"><!--[if !IE]><DIV style="border-left: 2px solid #009900; border-right: 2px solid #009900;  padding: 0px 15px; margin: 2px 0px;"><![endif]-->
            <pre wrap="">Changeset: 51b002381b35
Author:    rfield
Date:      2013-11-04 10:12 -0800
URL:       <a moz-do-not-send="true" 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 moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:joel.franck@oracle.com">joel.franck@oracle.com</a>, <a moz-do-not-send="true" class="moz-txt-link-abbreviated" href="mailto:brian.goetz@oracle.com">brian.goetz@oracle.com</a>, <a moz-do-not-send="true" 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>
            <!--[if !IE]></DIV><![endif]--></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>
        </div>
        <!--[if !IE]></DIV><![endif]--></blockquote>
      <!--[if !IE]></DIV><![endif]--></blockquote>
    <br>
  </body>
</html>