编译器加载类要依靠classloader, 而classloader有3个级别,从高到低分别是BootClassLoader(名字可能不准确) , ExtClassLoader, AppClassLoader.
这3个加载器分别对应着编译器去寻找类文件的优先级别和不同的路径:BootClassLoader对应jre/classes路径,是编译器最优先寻找class的地方
ExtClassLoader对应jre/lib/ext路径,是编译器次优先寻找class的地方
AppClassLoader对应当前路径,所以也是编译器默认找class的地方
现在给你分析你的问题我想因为Thread.currentThread().getContextClassLoader().loadClass(className)
是线程中的类加载器,直接调用起来效率最高,假设在这三个类加载器都找不到你的类,直接用Class.forname()映射
,这样就要多消耗资源了,一个线程调用资源开销不大,那要是几百个并发呢。个人理解楼主参考一下
Thread.currentThread().getContextClassLoader().loadClass(className)
最新推荐文章于 2022-08-15 10:47:07 发布