Ineexof(char) sounds like as fast and simpler? Sent from my iPhone
On Nov 5, 2013, at 8:55 AM, Peter Levart <peter.lev...@gmail.com> wrote: > On 11/04/2013 07:12 PM, robert.fi...@oracle.com wrote: >> Changeset: 51b002381b35 >> Author: rfield >> Date: 2013-11-04 10:12 -0800 >> URL: http://hg.openjdk.java.net/jdk8/tl/jdk/rev/51b002381b35 >> >> 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: joel.fra...@oracle.com, brian.go...@oracle.com, >> robert.fi...@oracle.com >> >> ! 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 >> > Hi Robert, > > I also propose a much faster variant of: > > + /** > + * Checks if {@code Class cls} is a VM-anonymous class > + * as defined by {@link sun.misc.Unsafe#defineAnonymousClass} > + * (not to be confused with a Java Language anonymous inner class). > + */ > + public static boolean isVMAnonymousClass(Class<?> cls) { > + return cls.getSimpleName().contains("/"); > + } > > > The following: > > public static boolean isVMAnonymousClassFAST(Class<?> cls) { > String name = cls.getName(); > for (int i = name.length() - 1; i >= 0; i--) { > char c = name.charAt(i); > if (c == '.') return false; > if (c == '/') return true; > } > return false; // root package > } > > It's about 12..25x faster for typical class names and doesn't produce any > garbage. > > > Regards, Peter >