类加载

类加载:类加载器将class文件加载到虚拟机的内存中(放在方法区中)

类加载过程:

 

加载:在硬盘上查找并通过IO读入字节码文件。

连接:执行校验、准备、解析步骤。

  校验:校验字节码文件的正确性。(a.校验文件格式:是否为.class文件 b.检验元数据:是否符合java语言规范 c.检验字节码:程序语义是否合法符合逻辑 d.检验符号引用,确保引用一定会被访问到,不会出现类不会被访问到的问题)(校验步骤是非必需步骤,可通过-Xverifynone关闭大部分的类验证)

  准备:给类的静态变量分配内存,并赋予默认值。

  解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()),替换为指向数据所存内存的指针或句柄等(直接引用)。这就是所谓的静态链接过程(类加载期间完成)。而动态链接是指在程序运行期间完成的符号引用替换为直接引用。

初始化:对类的静态变量初始化为指定的值,执行静态代码块。

ps:

符号引用:用一组符号来表示我们所需的目标(简单说就是用符号表示类的信息,包括类名、变量名、方法名、甚至是(),都用符号来代替)

 

直接引用:就是地址值表示我们所需目标

符号引用替换为直接引用:就是将我们所需目标的符号替换成地址(此过程在类加载期间完成就是静态链接,在程序运行期间完成就是动态链接)

 

posted @ 2020-03-21 09:37  城为唯一  阅读(158)  评论(0编辑  收藏  举报