我学习了JVM类加载过程的定制罐,并得到了解以下事实:JVM类加载器无法加载从扩展类路径
的类装载器子系统采用了代表团分级结构算法 它将搜索从BootStrap路径 - >扩展路径 - >应用程序路径的顺序。
然后我想“试试”这在如下实际代码:
创建A类和B类; A类与main()方法和一个B类型变量。
编译后,我用jar命令从B.class中得到B类的jar文件,然后删除B.class文件,把B.jar文件放到jdk/jre/lib/ext中 (由于oracle doc说extClassLoader不会在jdk/jre/lib/ext中搜索任何松散的类文件)。
结果是ClassNotFoundException的。所以我的问题是:
1)是否JVM不允许用户clasfile加载从引导程序和扩展类路径? 2)如果是这样,为什么它使用委托层次结构算法加载,这似乎导致效率低下?
tks ....
JVM使用ExtensionClassLoader加载你自己的jar包,你可以尝试使用这个calssLoader来加载这个类并且看看实际发生了什么。 –