三、jvm-类加载深度解析

一、虚拟机执行代码过程

windows虚拟机执行代码流程:

1.运行代码>

2.java.exe 底层调用 jvm.dll 启动jvm虚拟机>

3.启动引导类加载器(c++实现)>

4. 调用Launcher.getLauncher()方法,创建其他类加载器>

5.最后会使用AppClassLoader loadClass()加载本类;

6.执行程序>7.最终jvm销毁

二、类加载过程 loadClass()

加载-----------》验证-----------》准备-----------》解析-----------》初始化

加载:通过文件io读取类的字节码文件(二进制文件),直到使用时,才会加载;例如new 一个对象,和调用类中的main()方法时;在内存中会生成一个对应的class文件,作为方法区的对这个类的访问入口;

验证:验证类字节码文件是否正确

准备:初始化类中的静态变量赋值为初始化值

解析:运行时将类中的静态方法 也就是字面量在运行时将字面量的,将引用替换为直接引用,句柄或者直接指针也称为静态连接

初始化:将静态变量赋值,执行静态代码块

三、类加载器介绍

类加载器介绍.png

四、双亲委派机制

什么是双亲委派机制?

双亲委派机制是jvm类加载器设计的一个加载机制,保证被加载类的唯一性(只加载一次),为什么会设计双亲委派机制,沙箱安全机制可以防止自己核心api被别人恶意篡改;

核心代码:


loadClass源码.png

双亲委派机制:简单User.class加载流程

双亲委派机制.png

学习是枯燥无味的,但是如果你认真了,你会发现其中的乐趣,你就不会觉得枯燥了😁,最近也会陆续再出一下关于虚拟机的文章,有兴趣的小伙伴可以加我的微信或者qq沟通一起学习和进步!!
以上就是我对虚拟机执行代码的过程以及类的加载过程的理解,其中如果哪里有些不足,欢迎大家可以在评论区留言指出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。