Proxy.isProxyClass scalability

Mandy Chung mandy.chung at oracle.com
Fri Apr 12 21:31:16 UTC 2013


Hi Peter,

Thank you for rebasing the patch. This is very good work and I hope to 
make time to work with you to get your patch to jdk8 over the next 
couple weeks.

On 4/10/2013 5:35 AM, Peter Levart wrote:
> Hi Alan,
>
> I have prepared new webrev of the patch rebased to current tip of 
> jdk8/tl repo:
>
> https://dl.dropboxusercontent.com/u/101777488/jdk8-tl/proxy/webrev.04/index.html 
>
>
[...]
>
> I also devised an alternative caching mechanism with scalability in 
> mind which uses WeakReferences for keys (for example ClassLoader) and 
> values (for example Class) that could be used in this situation in 
> case adding a field to ClassLoader is not an option:
>

I would also consider any alternative to avoid adding the 
proxyClassCache field in ClassLoader as Alan commented previously.

My observation of the typical usage of proxies is to use the interface's 
class loader to define the proxy class. So is it necessary to maintain a 
per-loader cache?  The per-loader cache maps from the interface names to 
a proxy class defined by one loader. I would think it's reasonable to 
assume the number of loaders to define proxy class with the same set of 
interfaces is small.  What if we make the cache as "interface names" as 
the key to a set of proxy class suppliers that can have only one proxy 
class per one unique defining loader.  If the proxy class is being 
generated i.e. ProxyClassFactory supplier, the loader is available for 
comparison. When there are more than one matching proxy classes, it 
would have to iterate all in the set.

This alternative is sub-optimal than the per-loader cache. I'd be 
interested in your thought of this alternative and any rough idea of the 
performance difference with and without the per-loader cache approach 
for the annotation case.

Coding convention: we use /** ... */ for javadoc and /*...*/ or // for 
comments.  Your patch uses /**...*/ style as comments that need fixing.  
The style you have for
    try {
    }
    catch {
    }
    finally {
    }

Mandy

> https://github.com/plevart/jdk8-tl/blob/proxy/test/src/test/WeakCache.java 
>
>
>
> Regards, Peter
>
>




More information about the core-libs-dev mailing list