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