JVM之类加载机制

前言

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、解析和初始化,最终形成可以直接被虚拟机使用的Java类型,这个过程被称作虚拟机的类加载机制,类的整个生命周期包括加载、验证、准备、解析、初始化、使用和卸载,其中验证、准备、解析统称为连接,如图所示:

类的生命周期

类加载过程

  • 加载

通过类的完全限定名来获取定义类的二进制字节流,在《Java虚拟机规范》中并没有明确规定要如何获取二进制字节流,也就是说你可以以任意的方式获取,比如可以从压缩包、网络或者利用动态代理生成,然后将字节流所代表的静态存储结构转换为方法区的运行时数据结构,最后在内存中生成一个代表这个类的Class对象。

  • 验证

该阶段是确保字节流中包含的信息符合《Java虚拟机规范》的约束要求,保证这些信息被当作代码运行后不会危害虚拟机的安全,否则很可能因为载入了有错误的或有恶意的字节码而导致整个系统崩溃,主要包括文件格式验证、元数据验证、字节码验证、符号引用验证。

  • 准备

该阶段是为类中定义的变量分配内存并设置类变量初始值(简单来说就是i = 5,这里赋初始值是0,而5将会在初始化阶段进行赋值),注意这里并不包括实例变量。

  • 解析

该阶段是虚拟机将常量池内的符号引用替换为直接引用的过程,其中符号引用指的是一组符号来表示所引用的目标,符号可以是任何形式的字面量,直接引用指的是可以直接指向目标的指针、相对偏移量或者一个能间接定位到目标的句柄,主要包括类或接口的解析、字段解析、方法解析。

  • 初始化

简单来说就是执行程序代码,初始化类变量。

类加载器

该小节就不作过多的描述了,专门找了一篇写的通俗易懂的文章,结合源码阐述了都有哪些类加载器、双亲委派模型的机制、如何自定义类加载器,我就不在费劲去做功课啦,贴上链接-类加载器的底层分析

参考链接

《深入Java虚拟机》

https://blog.csdn.net/javazejian/article/details/73413292

posted @ 2020-12-21 19:19  zliawk  阅读(98)  评论(0)    收藏  举报