类加载器初始化过程
2022-03-24 14:35:38 0 举报
类加载器初始化过程
作者其他创作
大纲/内容
ExtClassLoader
加载完成,JVM会调起Math类的main方法
windows系统下java.exe 调用底层的jvm.dll文件创建java虚拟机(C++)
调用父类URLClassLoader
这里实现 了双亲委派机制调用父类ClassLoader的方法
parent != null
C++调用JAVA代码创建JVM实例化Launcher,调用getLauncher()该类由引导类加载器加载
双亲委派机制
具体实现
return class
创建扩展类加载器
1、有parent则为ExtClassLoader
AppClassLoader
父类加载器加载失败由子类加载器加载
C++发起调用执行
是否加载过
创建应用程序类加载器传入扩展类加载器
源码实现
bootstarpLoader
jvm默认调用getClassLoader返回来的应用程序类加载器去加载我们的类
向上委派
return null到了应用程序类加载器
c = findClass(name);
调用loadClass加载我们要运行的类
findLoadedClass(name)
查询是否已经加载过
没有
引导类没有加载和加载不到
寻找、并真正加载类
return null
sun.misc.Launcher.getLauncher()
2、parent=null则为引导类加载器
Launcher.getClassLoader()
Math.main()
程序结束
扩展类加载器找不到返回null
sun.misc.Launcher初始化使用了单例模式设计,保证一个JVM虚拟机内只有一个sun.misc.Launcher实例构造方法创建了两个类加载器
this.loader = Launcher.AppClassLoader.getAppClassLoader(var1);
父加载器指向null因为引导类加载器由C++实现
findBootstrapClassOrNull(name)
创建一个引导类加载器实例(C++实现)
ClassLoader.loadClass(name)
父加载器指向了扩展类加载器
JVM销毁
c == null
类
var1 = Launcher.ExtClassLoader.getExtClassLoader();
应用程序类加载器找到return
0 条评论
下一页