<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">Hi Robert,<br>
<br>
I think this fix is not complete. When one sets the system
property sun.reflect.noInflation=true, reflection proxy is still
attempted to be generated for anonymous classes (see
ReflectionFactory.newMethodAccessor/newConstructorAccessor).<br>
<br>
I would also restructure the Method/Constructor accessor logic
differently. The check for ReflectUtil.isVMAnonymousClass() can be
performed just once (in the
newMethodAccessor/newConstructorAccessor methods) and based on
this check, create accessor:<br>
<br>
- for classic declaring class - as is / unchanged<br>
- for anonymous declaring class - just create and return
NativeMethodAccessorImpl without a parent<br>
<br>
Then in NativeMethodAccessorImpl (and same for constructor),
modify the inflation checking logic:<br>
<br>
<tt> if (<b>parent != null && </b>++numInvocations
> ReflectionFactory.inflationThreshold()) {</tt><tt><br>
</tt><tt> MethodAccessorImpl acc = (MethodAccessorImpl)</tt><tt><br>
</tt><tt> new MethodAccessorGenerator().</tt><tt><br>
</tt><tt>
generateMethod(method.getDeclaringClass(),</tt><tt><br>
</tt><tt> method.getName(),</tt><tt><br>
</tt><tt>
method.getParameterTypes(),</tt><tt><br>
</tt><tt>
method.getReturnType(),</tt><tt><br>
</tt><tt>
method.getExceptionTypes(),</tt><tt><br>
</tt><tt>
method.getModifiers());</tt><tt><br>
</tt><tt> parent.setDelegate(acc);</tt><tt><br>
</tt><tt> }</tt><br>
<br>
Regards, Peter<br>
<br>
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>
<br>
</body>
</html>