请问一个classloader的问题,AppClassLoader负责加载classpath下的类

2025-05-10 03:08:23
推荐回答(3个)
回答1:

类加载器主要分三种:bootstrap(由C语言编写,固化在jvm上)、ExtClassLoader、AppClassLoader。而bootstrao主要加载rt.jar,ExtClassLoader主要加载Jdk安装路径/jre/lib/ext下的字节码,AppClassLoader主要加载ClassPath下的字节码,类加载器的委托加载原理,首先加载类一直交给父类加载器加载,一直提交到bootstrap,当父类加载器加载不到时,在一层层的返回给下一级加载器加载!关于这些知识提问者相当熟悉,我做过这个实验,编写一个类,把这个类压缩到rt.jar文件,想让这个类由bootstrap加载,可是bootstrap一直加载不了,当我把类放到ext下时,ExtClassLoader可以加载得了,所以我怀疑sun不允许别人对rt.jar修改,bootstrap一定需要加载指定的类。像“hello冷风”做的实验,bootstrap:不是一个java类,是用C语言写的,固化在JVM里面的二进制代码,专门负责加载rt.jar,可能sun公司做了特殊处理,要不然啥都没了!!只是个人粗浅的认识,还希望“版主”跟其他的同志们多多指点!!

回答2:

不论是什么类,加载时都有一个双亲委派的检查过程,只要父一级的加载器已经加载过了,则子加载器不再加载,父一级会不断向上传递检查直至到顶,此时该类依然没被加载,则有相应异常由父级到子级的异常传递来使子一级加载器不断findClass并且向下传递,直至被加载上

回答3:

啥啊,说明白点