why is VM calling ClassLoader.loadClassInternal

Christian Thalinger twisti at complang.tuwien.ac.at
Wed Aug 29 02:11:07 PDT 2007


On Wed, 2007-08-29 at 19:03 +1000, David Holmes - Sun Microsystems
wrote:
> Christian,
> 
> The "magic" is that loadClassInternal is synchronized.
> 
> There's a very long and checkered history here. When the classloader 
> architecture was re-worked in JDK 1.2 they should have made certain 
> methods, like loadClass, final. But compatibility said they couldn't do 
> that and instead it is recommended that loadClass not be overridden but 
> instead findClass is overridden. This means the VM can't make 
> assumptions about whether a classLoader correctly protects itself 
> against concurrent loading. Hence loadClassInternal was made the private 
> upcall made by the VM, so at least it was known that the call was 
> synchronized.
> 
> For "well-behaved" classloaders that follow the delegation model 
> correctly this works fine. For classloaders that don't do that ... well 
> you'll see some very ugly and inexplicable code in there to try and 
> accommodate them.
> 
> The classloader architecture is being re-visited for Java 7, in part to 
> allow more flexible delegation structures that are anticipated for the 
> Java module system (JSR 277) and superpackages (JSR 294).

Hi David!

Thanks for the explanation, I see the point.  I will adopt that.
Compatibility is a pain :-)

- twisti




More information about the hotspot-runtime-dev mailing list