java编程300例(万猿沪10k系列类加载机制)

正式开篇,先拜一拜[谢谢][奸笑]

加粗部分重点掌握,其余这部分做到有印象,用到在做深入了解

类加载的大致流程为:加载-连接-初始化

其中连接又可以细化为:验证-准备-解析

java编程300例(万猿沪10k系列类加载机制)(1)

大致介绍一下每一步都是在干啥玩意

加载:读取.class文件里的机器码(java字节码)到JVM的内存中

机器码主要几大来源:

  • 本地文件系统
  • 网络
  • jar,zip,war等压缩文件
  • 动态编译的java源文件
  • 程序直接生成

验证:主要就是对语义格式等进行验证

验证机器码是否符合java语言规范,比如变量、方法是否重复了,数据类型是否有效了,巴拉巴拉一堆

准备:为类静态变量分配内存并初始化

分配内存分为指针碰撞和空闲列表两种方式,具体介绍留在下一节

初始化就是给变量赋一个默认值,其中有两种类型特殊一丢丢

boolean默认值是false,reference(引用类型)默认值是null

附一张更形象一点的图片

java编程300例(万猿沪10k系列类加载机制)(2)

解析:将类、字段、方法、接口等信息的符号引用替换为直接引用

java编程300例(万猿沪10k系列类加载机制)(3)

用这个简单的例子解释一下,计算机肯定不认识a是什么玩意,对计算机来说它就是个符号,所以要将它转换成可以直接找到数据1的东西,这个东西就是直接引用。

直接引用分为3种:

  • 指针:直接指向存有数据1的内存(指针也可以理解为内存地址)
  • 相对偏移量:就是指针相对偏移多少之后能指向数据1的内存
  • 间接定位到对象的句柄:就是将符号引用指向句柄,句柄中存着数据1的内存地址

初始化:给类的静态变量赋值

类的构造器方法<clinit>会收集静态变量类型及赋值动作,先收集所有的类型然后按代码先后顺序进行赋值

全流程图:

java编程300例(万猿沪10k系列类加载机制)(4)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页