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