java.lang.Thread.contextClassLoader : what if it were a weak reference ?
Tom Hawtin
Thomas.Hawtin at Sun.COM
Mon Mar 23 11:11:39 UTC 2009
Sylvain Laurent wrote:
>
> I'm tracking classloader leaks more or less as a hobby and found out
> that one of the (many) source of leaks come from threads that still have
> a reference to a classloader through their contextClassLoader instance
> variable.
>
> So, I'm wondering : what if instead of
> "private ClassLoader contextClassLoader;" we had "private
> WeakReference<ClassLoader> contextClassLoaderRef" and the method
> getContextClassLoader would more or less
> returned contextClassLoaderRef.get() ?
>
> Would it break many things ? is it incompatible with the specs ?
How much it would break, I wouldn't like to guess.
Incompatible? Yes. It is legitimate to use a class loader only through
Thread.getContextClassLoader.
As for solutions: I guess containers could add a fake context class
loader with a weak reference to the real one (perhaps parent could
optionally become a weak reference?). Really there needs to be more care
taken when creating threads to make sure the context class loader (and
indeed InheritableThreadLocals) are inherited only when appropriate.
Tom Hawtin
More information about the core-libs-dev
mailing list