Java类加载过程 川长思鸟来 2022-03-06 11:28 268阅读 0赞 类的加载简介 1.类加载一般分为三大阶段:加载、连接和初始化 ![类加载三个大阶段(图来自zejian\_)][zejian] 加载阶段:主要查找class文件(二进制文件) 连接阶段:可以分为验证、准备、解析三个更为详细的阶段 验证:主要确保class版本、class文件的魔术因子等 准备:为类的静态变量分配内存,并且初始化默认的值 解析:把类中的符号信用转为直接引用 初始化阶段:为类的静态变量赋予正确的初始值。 2.类的主动和被动使用 主动使用(6种): new 初始化、访问类的静态变量、访问类的静态方法、对某个类进行反射操作、初始化子类导致父类初始化、启动类(main) 被动使用: 除过以上6种都是被动使用(数组new不是主动使用) 3.类的加载过程详解 类的加载阶段: 类的加载简单的说就是把class二进制加载到内存中,然后将该字节流的静态存储结构转为方法区中运行的数据结构,并在堆内存生成唯一的class对象,作为方法区数据结构的入口。 类的加载获取方式: 运行时生成、网络方式获取、服务zip文件获取(jar、war)、将类的二进制数据存储在数据库的BLOB字段类型中、运行时生成class文件,并动态加载 类的连接阶段: 验证: 验证文件格式:魔术因子、主次版本号等 元数据验证:语义分析过程、是否存在父类、是否集成被final修饰的类等 字节码验证:主要验证控制流程 其他验证:通过符号引用描述的字符能够顺利找到相关的类等 准备: 为该对象的静态变量分配内存和初始值。final修饰的是编译阶段javac会将其生成一个ConstantValue属性,直接赋值。 解析:解析阶段也会有一些交叉验证过程,比如符号验证等。 类接口解析、字段解析(某个类包含某个字段,则直接返回这个字段的引用)、类方法的解析(可以直接使用该类调用)、 接口方法解析(必须有相应的实现类继承才能调用、可以定义方法)。 4.类的初始化 这是类的最后一个阶段,这个阶段最主要就是做一件事情,就是执行`<clinit>()`方法,在执行时候都会赋予正确的值,也就是编写时候的值。 希望能交流更多技术,关注小白的微信公众号吧。 ![在这里插入图片描述][20190703100512270.jpg] [zejian]: /images/20220303/8db2ccabd56540e68b8f52d522ef977a.png [20190703100512270.jpg]: https://img-blog.csdnimg.cn/20190703100512270.jpg
还没有评论,来说两句吧...