首页 > 其他分享 >简单理解类加载器的基本过程和作用

简单理解类加载器的基本过程和作用

时间:2023-02-15 00:33:05浏览次数:44  
标签:初始化 文件 验证 理解 JVM 简单 class 加载

类加载的大致过程

编写.java文件,该文件存储的程序需要执行的逻辑内容,将.java经过Java编译器编译之后生成对应的.class后缀文件,class文件是.java文件经过转换之后的JVM虚拟机指令,当需要加载某个类的时候,JVM虚拟机会将对应的class文件加载,并创建对应的class对象,将class文件加载到JVM虚拟机的内存中,这个过程就是类加载。类加载器的任务就是读取一个类的二进制流到JVM中,然后转换为一个与目标类对应的java.lang.Class对象实例

类加载的详细过程

第一步 加载

查找一个类的class文件,创建一个class对象

第二步 验证

验证Class文件的字节流信息是否符合JVM虚拟机要求,不会危害JVM虚拟机,主要包括四种验证,即文件格式验证、元数据验证、字节码验证、符号引用验证。

第三步 准备

为类变量(static修饰的变量)分配内存,并设置,该类变量的初始值为0(static int i = 5,这里只会将i初始化为0),值5将在初始化时赋值)当然不包括final修饰的static,因为final在编译的时候就会分配,不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java堆中

第四步 解析

将常量池中的符号引用替换成直接引用。符号引用就是用一组符号来描述目标,而直接引用就是直接指向目标的指针、相对偏移量或者间接定位目标的句柄。

第五步 初始化

类加载最后阶段,若类具有超类,则对其进行初始化,执行静态初始化器和静态初始化成员变量

标签:初始化,文件,验证,理解,JVM,简单,class,加载
From: https://www.cnblogs.com/HelloCTF/p/17121323.html

相关文章

  • 第5章 函数式编程**-函数和方法,高阶函数,匿名函数,函数柯里化,闭包,递归,控制抽象(传值参数,
    第5章函数式编程-函数和方法,高阶函数,匿名函数,函数柯里化,闭包,递归,控制抽象(传值参数,传名参数),惰性加载目录第5章函数式编程-函数和方法,高阶函数,匿名函数,函数柯里化,闭包......
  • 三种懒加载方式及对比
    利用getBoundingClientRect优点:容易理解,操作easy缺点:只能用于全屏滚动的列表,不适用于局部滚动,譬如下图<!DOCTYPEhtml><htmllang="en"><head><metach......
  • 【图像处理基础】YUV格式理解
     1.YUV数据格式简介YUV,是一种颜色编码方法。常使用在各个视频处理组件中。“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma)。NV......
  • 用简单的代码,将小程序文件直传到腾讯云COS实践
    简介本文介绍如何不依赖SDK,用简单的代码,在小程序直传文件到腾讯云COS的存储桶。注意:本文档内容基于XML版本的API。前期条件登录 对象存储控制台 ,创建存储桶,......
  • CSS简单选择器
    CSS选择器,先来学习简单选择器。CSS选择器是用来“寻找”或“选择”,你想要定义样式的HTML元素的。我们前面学习过一个最简单的选择器——比如,这个H1元素就是选择器,我们称之为......
  • 01 整体理解异常和错误
    整体理解异常和错误什么是异常异常结构体系分类ErrorException代码packagecom.zhan.base06Exception.demo01;publicclassTest01{//异常publics......
  • 【论文阅读】- 我对“AlexNet”的理解
    ......
  • 更简单的原型语法和原型语法的动态性
    更简单的原型语法为减少不必要的输出,也从视觉上更好的封装原型的功能,用一个包含所有属性和方法的对象字面量来重写整个原型对象:functionPerson(){}Person.prototyp......
  • PID参数的一些理解
    引入PID控制在工业生产的控制领域虽然年头已久,但是依然占有主要的地位,靠的就是它简洁优美的控制逻辑。虽然网上已经有很多相关的科普说明了,但是有了点新的想法,就在这里和......
  • 【前端】microApp微前端搭建简单Demo
    创建项目第一步,创建项目,分别创建base_app(主基座)、a_app(子项目1)配置主基座项目Main.js中引入@Micro-zoe/micro-app//main.jsimportmicroappfrom'@micro-zoe/mic......