Good point.  Are you seeing a leak in practice?
The cache is important, especially to inexact MH.invoke.
— John

On Apr 24, 2015, at 9:14 AM, Peter Levart <peter.lev...@gmail.com> wrote:
> 
> I think there is a Class(Loader) leak in MethodHandle.asType() 
> implementation. If for example some MH (say mhX) is long lived (because it is 
> a system cached MH) and a client "generates" variants from it by invoking 
> mhX.asType(newType) and the newType contains a type (either return type or 
> parameter type) that is loaded by some child ClassLoader, then such derived 
> MH is retained strongly from mhX via the MethodHandle.asTypeCache field. 
> Until this field is overwriten by some other MH, child ClassLoader can not be 
> GCed.
> 
> In case this one-element cache is needed to speed things up, it should be a 
> WeakReference, like the following:
> 
> http://cr.openjdk.java.net/~plevart/jdk9-dev/MethodHandle.asTypeCacheLeak/webrev.01/
>  
> <http://cr.openjdk.java.net/~plevart/jdk9-dev/MethodHandle.asTypeCacheLeak/webrev.01/>
> 

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to