一、虚拟机执行代码过程
windows虚拟机执行代码流程:
1.运行代码>
2.java.exe 底层调用 jvm.dll 启动jvm虚拟机>
3.启动引导类加载器(c++实现)>
4. 调用Launcher.getLauncher()方法,创建其他类加载器>
5.最后会使用AppClassLoader loadClass()加载本类;
6.执行程序>7.最终jvm销毁
二、类加载过程 loadClass()
加载-----------》验证-----------》准备-----------》解析-----------》初始化
加载:通过文件io读取类的字节码文件(二进制文件),直到使用时,才会加载;例如new 一个对象,和调用类中的main()方法时;在内存中会生成一个对应的class文件,作为方法区的对这个类的访问入口;
验证:验证类字节码文件是否正确
准备:初始化类中的静态变量赋值为初始化值
解析:运行时将类中的静态方法 也就是字面量在运行时将字面量的,将引用替换为直接引用,句柄或者直接指针也称为静态连接
初始化:将静态变量赋值,执行静态代码块
三、类加载器介绍
四、双亲委派机制
什么是双亲委派机制?
双亲委派机制是jvm类加载器设计的一个加载机制,保证被加载类的唯一性(只加载一次),为什么会设计双亲委派机制,沙箱安全机制可以防止自己核心api被别人恶意篡改;
核心代码:
双亲委派机制:简单User.class加载流程
学习是枯燥无味的,但是如果你认真了,你会发现其中的乐趣,你就不会觉得枯燥了😁,最近也会陆续再出一下关于虚拟机的文章,有兴趣的小伙伴可以加我的微信或者qq沟通一起学习和进步!!
以上就是我对虚拟机执行代码的过程以及类的加载过程的理解,其中如果哪里有些不足,欢迎大家可以在评论区留言指出。