Java类加载_双亲委派模型

Bootstap ClassLoader 说:

我负责把JAVA_HOME\lib目录下的类库或被-Xbootclasspath参数指定的路径中的类库进行加载,然后扔进内存中。

要是吊丝程序员自己写了自定义加载器,而且还想委托我来加载他写的破类,那就在getClassLoader()方法中返回null即可。

Extension ClassLoader说:

JAVA_HOME\lib\ext下或被java.ext.dirs系统变量指定的路径下的所有类库都由俺来加载。

Application ClassLoader 曰:

程序员指定的应用程序类路径下的类库交给我了。

一般情况下,如果一个类加载器收到加载请求,它一般都会甩锅给他父加载器,比如:一个自定义的类加载器,它先甩给Application ClassLoader,这Application ClassLoader 二话不说甩给Extension ClassLoader,Extension ClassLoader又二话不说甩给Bootstap ClassLoader ,Bootstap ClassLoader 没招,只能看下自己的小本本,一查,要求加载的类不在自己小本本记录的范围内,就扔回Extension ClassLoader,同样的Extension ClassLoader也查小本本,不在范围继续扔回去,都不在范围最后还是得扔回到自定义的类加载器手里。

在这里插入图片描述

Q:当基础类要调用用户的代码咋办?
R:用线程上下文类加载器(Thread Context ClassLoader)

Q:需要代码热更换咋整?
R:OSGi环境下,实现了模块化标准,需要更换时,把Bundle连同类加载器一起换掉以实现代码的热替换。

猜你喜欢

转载自blog.csdn.net/qiangzai110110/article/details/89336607