Initial webrev with changes for JDK 9

Alan Bateman Alan.Bateman at oracle.com
Wed Mar 16 20:13:52 UTC 2016


On 16/03/2016 20:04, Peter Levart wrote:
> :
>
> I have another optimization...
>
> In java.lang.reflect.Proxy, a package is added dynamically to the 
> module the 1st time a proxy class is defined in that module. Each time 
> new proxy class is defined, an array of module package names is 
> compiled by concatenating two Streams, dumping them into array, 
> wrapping it with an ArrayStream and searching for package if it is 
> already defined:
>
>  583             // add the package to the runtime module if not exists
>  584             if (m.isNamed() && 
> !Stream.of(m.getPackages()).anyMatch(proxyPkg::equals)) {
>  585                 m.addPackage(proxyPkg);
>  586             }
>
> ... just to avoid calling Module.addPackage() in case the package is 
> already defined in that module, although the Module.addPackage() is 
> idempotent. Presumably to avoid synchronization? But if the module has 
> lots of packages, then such linear search is expensive and produces 
> garbage.
>
> Here's how this linear search and the synchronization in 
> Module.addPackage() can be avoided:
>
> http://cr.openjdk.java.net/~plevart/jake/Proxy.addPackage.opt/webrev.01/
>
Ugh, I haven't noticed that ProxyClassFactory defineProxyClass was doing 
a linear search, that's a consequence of getPackages() returning an 
array. So I think what you have make sense - thanks!

-Alan


More information about the jigsaw-dev mailing list