JVM类加载全过程
2021-09-19 13:14:20 0 举报
大苏打撒旦
作者其他创作
大纲/内容
自定义类加载器
类加载检查
是否已加载类
jar包java Math.classmain()
BootstrapClassLoader
ExtClassLoader
初始化
向下查找:查找加载路径,有就加载返回,没有就向下继续找
对求填充
创建一个引导类加载器实例(C++实现)
向上委派到顶层加载器为止,向下查找到发起加载的类加载器为止
JVM
AppClassLoader
加载完成时,JVM会执行Student类的main方法入口
向上委派:查找缓存,有就返回,没有就向上继续找
User.class
sun.misc.Launcher.getLauncher()
内部对齐:boolean、byte、short会补成4个字节
Student.javaUser.java...
加载-》验证-》准备-》解析-》初始化
是
加载类
获取主类的加载器ClassLoader,AppClassLoader的实例
否
调用loadClass加载要运行的类Student
windows系统下java.exe调用底层的jvm.dll文件创建JVM(C++实现)
实例数据
java程序运行结束
JVM销毁
分配内存
执行<init>方法
C++发起调用
Mark word:32位机器占4个字节,64位机器占8个字节
classLoader.loadClass(\"com.stud.Student\")
使用
委派到顶层后,缓存中没有,就到加载路径中查找,有就加载返回,没有就向下继续查找
Math.main()
编译打包
设置对象头
java com.stud.Student.class
数据对齐:总共的内存大小必须被8整除,否则需要补齐
launcher.getClassLoader()
类型指针:开启指针压缩占4个字节,关闭压缩占8个字节
对象
0 条评论
回复 删除
下一页