类加载器
Jvm第九期的 图片素材:
https://www.liuchengtu.com/lct2021/#R6035e93def743092f023343f60cc6173
什么是类加载器
类加载器的分类
Launcher 源码解读
Launcher.ExtClassLoader var1;
try {
// 获取到我们扩展类加载器
var1 = Launcher.ExtClassLoader.getExtClassLoader();
} catch (IOException var10) {
throw new InternalError(“Could not create extension class loader”, var10);
}
try {
//获取到我们应用类加载器
this.loader = Launcher.AppClassLoader.getAppClassLoader(var1);
} catch (IOException var9) {
throw new InternalError(“Could not create application class loader”, var9);
}
// 当前程序启动的线程 默认的 ClassLoader 应用类加载器
Thread.currentThread().setContextClassLoader(this.loader);
String var2 = System.getProperty(“java.security.manager”);
if (var2 != null) {
SecurityManager var3 = null;
if (!“”.equals(var2) && !“default”.equals(var2)) {
try {
var3 = (SecurityManager)this.loader.loadClass(var2).newInstance();
} catch (IllegalAccessException var5) {
} catch (InstantiationException var6) {
} catch (ClassNotFoundException var7) {
} catch (ClassCastException var8) {
}
} else {
var3 = new SecurityManager();
}
那些操作会初始化类加载器
类的主动使用:
1.调用类的静态方法
2.invokeStatic 调用静态方法
3.Main
4.New
5.Class.formname
6.子类初始化一定会初始化父类
初始化一个类,那么一定会触发类加载器
但是类加载器加载了该类,但是该类不一定初始化。
类加载器的双亲委派机制
首先在我们类加载器分为四种 自定义类加载器、应用类加载器、扩展类加载器、启动类加载器。
当一个类加载器收到请求之后,首先会依次向上查找到最顶层类加载器(启动类加载器),依次向下加载class文件,如果已经加载到class文件,子加载器不会加继续加载该class文件。
双亲委派机制机制的好处
目的就是为了防御开发者为定义的类与jdk定义源码类产生冲突问题,保证该类在内存中的唯一性。
ClassLoader源码解读
Launcher类源码解读
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!