首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JVM的classLoader体系-二

2012-10-31 
JVM的classLoader体系-2?? ?在“JVM的classLoader体系-1”,总结了jvm的classloader一些基本的内容,肯定有很

JVM的classLoader体系-2
?? ?在“JVM的classLoader体系-1”,总结了jvm的classloader一些基本的内容,肯定有很多不足的地方,还请大家指点,现在对jvm类加载机制进行一下测试:1.建立测试文件Main.java和Test.java

Main.java:(负责打印出Main.java和Test.java的类加载器)

?

??? Test? at Main.main(Main.java:8)

3.2测试02-测试结果分析

由于Bootstrap?ClassLoader下面有Main.class,所以由Bootstrap?ClassLoader负责加载Main.class,在默认的情况下,Main.class所引用的类将由Bootstrap加载,由于Bootstrap所加载的目录下的Test.class被删除了,所以出来NoClassDefFoundError的现象

3.3测试03-文件存放的位置

?Javasource目录下:?Main.class?Test.class?Jdk\jre\ib\ext\classes目录下:?Main.class?Test.class?Jdk\jre\classes目录下:?Test.class3.3测试03-测试结果

?Main'sclassLoader issun.misc.Launcher$ExtClassLoader@126b249

?Test'sclassLoader is null3.3测试03-测试结果分析

Main.class由ExtClassLoader加载,在默认的情况下,Test.class也应该由ExtClassLoader加载,ExtClassLoader首先委派其父类BootstrapClassLoader加载,由于Bootstrap所加载文件下有Test.class,所以由Bootstrap负责加载Test.class

3.4测试04-文件存放的位置

?Javasource目录下:

?Main.class?Test.class?Jdk\jre\ib\ext\classes目录下:?Main.class?Test.class?Jdk\jre\classes目录下:3.4测试04-测试结果

?

?Main'sclassLoader issun.misc.Launcher$ExtClassLoader@182f0db?Test'sclassLoader issun.misc.Launcher$ExtClassLoader@182f0db3.4测试04-测试结果分析思路如测试013.5测试05-文件存放的位置

?Javasource目录下:

?Main.class?Test.class?Jdk\jre\ib\ext\classes目录下:?Main.class?Jdk\jre\classes目录下:3.5测试05-测试结果

?

Main'sclassLoader issun.misc.Launcher$ExtClassLoader@126b249Test'sclassLoader is Exception in thread"main" java.lang.NoClassDefFoundError:

?Test

??????? at Main.main(Main.java:8)

Caused by: java.lang.ClassNotFoundException: Test

??????? atjava.net.URLClassLoader$1.run(URLClassLoader.java:202)

??????? at java.security.AccessController.doPrivileged(Native Method)

??????? at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

??????? at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)

??????? at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

??????? at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

??????? ... 1 more

3.5测试05-测试结果分析

思路如测试02

3.6测试06-文件存放的位置

?Javasource目录下:

?Main.class?Test.class?Jdk\jre\ib\ext\classes目录下:?Test.class?Jdk\jre\classes目录下:3.6测试06-测试结果?Main'sclassLoader issun.misc.Launcher$AppClassLoader@ad3ba4?Test'sclassLoader issun.misc.Launcher$ExtClassLoader@126b2493.6测试06-测试结果分析

思路如测试03

4.总结

1.从测试结果中可以看出,类加载器在加载应用程序的class文件时,首先委托其父类进行加载,在父类加载失败的情况下,从由自己去加载。

2.在默认情况下,类A引用类B,那么类B的加载由类A的加载器或者类A加载器的父类来完成

?

?

?

?

1 楼 dingherry 2011-04-17   很好的学习方案,by the way,LZ在看什么书呢?深入java虚拟机  吗? 2 楼 songkewei110 2011-04-17   dingherry 写道很好的学习方案,by the way,LZ在看什么书呢?深入java虚拟机  吗?
在看“深入java虚拟机”,看的一知半解,慢慢啃吧

热点排行