A small ClassLoader change proposal

Rémi Forax forax at univ-mlv.fr
Thu Sep 16 13:33:59 UTC 2010


  So you want to create a classloader local like there is a thread local.

You can subclass ClassLoader and put your field in the newly created class.
Why do you need to put your localMap in java.lang.Classloader ?

Rémi

Le 16/09/2010 14:56, Jevgeni Kabanov a écrit :
> Hi guys,
>
> I'd like to contribute two new classes to the JDK7 and add a new 
> package-visible field to the ClassLoader. These classes would be meant 
> for the framework and server developers to allow for greater control 
> over the references between classes in different class loaders. 
> Specifically the goal would be to prevent the notoriously common 
> classloader leaks. The motivation is partially described here:
> http://dow.ngra.de/2009/06/15/classloaderlocal-how-to-avoid-classloader-leaks-on-application-redeploy/
> That blog post also describes a way to backport it to older Java 
> versions, unfortunately we found that the described approach will not 
> work in some esoteric cases.
>
> The pseudo-code follows. It's not really optimized or even tested and 
> is only meant to illustrate the functionality and complexity of the 
> proposal. I'd like to hear your feedback on this.
>
> class ClassLoader {
>   Map localMap = new HashMap();
>   //...
> }
>
> public class ClassLoaderLocal {
>   private Object key = new Object();
>   public Object get(ClassLoader cl) {
>     cl.localMap.get(key);
>   }
>   public void set(ClassLoader cl, Object value) {
>     cl.localMap.put(key, value);
>   }
> }
>
> public class ClassLoaderWeakReference extends Reference {
>   private final WeakReference clRef;
>   private final ClassLoaderLocal cll = new ClassLoaderLocal();
>   public ClassLoaderWeakReference(Object target) {
>      clRef = new WeakReference(target.getClass().getClassLoader());
>      cll.set(target.getClass().getClassLoader(), target);
>   }
>   public Object get() {
>     if (clRef.get() == null)
>       return null;
>     return cll.get((ClassLoader) clRef.get());
>   }
> }
>
> me*Jevgeni Kabanov*: Founder & CTO at ZeroTurnaround 
> <http:/www.zeroturnaround.com/>
> jevgeni at zeroturnaround.com <mailto:jevgeni at zeroturnaround.com> | 
> Skype: ekabanov <skype:ekabanov?chat> | http://twitter.com/ekabanov
> "jrebel is r0x: http://bit.ly/6fRGji" - mschambeck 
> <http://twitter.com/mschambeck>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/core-libs-dev/attachments/20100916/629421ee/attachment.html>


More information about the core-libs-dev mailing list