AnonymousClassLoader and ClassLoader
Rémi Forax
forax at univ-mlv.fr
Thu Apr 24 15:44:35 PDT 2008
Charles Oliver Nutter a écrit :
> Rémi Forax wrote:
>> Yesterday evening, I've tried to replace the application classloader
>> (the one used to load the application) by one that use an anymous
>> class loader
>> to load the class. And i've tested by launching SwingSet2.
>>
>> And it doesn't work because UI program like SwingSet lookup their
>> resources
>> like image, icons etc. using getResource()/getResourceAsStream().
>> getResource() makes the assumption that if getClassLoader() returns null
>> the class is loaded by the bootstrap classloader.
>>
>> In my opinion, getResource() is not the only method that makes this
>> assumption
>> so an anonymous class should be able to specify an external classloader
>> when defined i.e. Unsafe.defineAnonymousClass should take
>> a classloader as argument.
>
> An interesting thought. I can think of a few places I expect to be
> able to call getClassLoader on a target class I've loaded at runtime,
> but that's generally because I want to associate other classes
> dependent on the target class (i.e. method handles for a
> freshly-loaded compiled Ruby script) with the same throwaway
> classloader. Given the looser nature of the anonymous classloader,
> that particular scenario would go away. I'd just always grab my trust
> anonymous classloader and throw classes at it, knowing they'd GC when
> they were no longer in use.
>
> I don't think the anonymous classloader is going to be something you
> can just start using lightly, since assumptions existing classes make
> about classloading are sure to get in the way.
The problem is: even if you want to use it lightly, i think you can't
control
the fact that an user can send your closure or any instance of a class
loaded
by the anonymous loader to a lib that relies on getClassLoader().
>
> - Charlie
Rémi
More information about the mlvm-dev
mailing list