Need reviewer for 6902010: (cl) Delay initialization of ClassLoader.parallelLoaders
Rémi Forax
forax at univ-mlv.fr
Tue Nov 17 19:22:05 UTC 2009
Le 17/11/2009 19:04, Alan Bateman a écrit :
> Valerie,
>
> I'd like to re-visit the initialization of the parallel-capable
> loaders [1]. Currently the set of parallel-capable loader types is
> created by ClassLoader's initializer. That works today but is a bit
> fragile in that any changes or fixes that cause ClassLoader to be
> initialized earlier in the VM startup could cause problems. For
> example, if ClassLoader were to be initialized earlier then adding the
> initial element will cause a weak reference to be created and that
> will NPE in the Reference's initializer as the main thread isn't in a
> thread group at that point. All code that executes before the system
> classes are fully initialized requires great care so for this one, I
> think the simplest thing would be to delay the initialization unless
> the first loader is created. Does that seem reasonable? I've put a
> webrev with the proposed changes here:
> http://cr.openjdk.java.net/~alanb/6902010/webrev.00/
> For testing, I've been using the tests in
> test/java/lang/ClassLoader/deadlock.
>
> Thanks,
> Alan.
>
> [1] http://hg.openjdk.java.net/jdk7/tl/jdk/rev/45ff1a9d4edb
>
>
Hi Alan,
I think you can remove the intermediary synchronizedMap when creating
loaderTypes
and add a synchronized to isRegistered.
You should add a private constructor with no parameter that throw an
AssertionError
because this class is not intended to be instantiated.
(you need the AssertionError because a private constructor can be called
from enclosing class).
Moreover, I don't think it's a good idea to synchronized on the class
(here ParallelLoaders.class)
because this object is public, by example you can get a reference to it
using a java agent.
I would prefer a synchronized block on loaderTypes.
Rémi
More information about the core-libs-dev
mailing list