java编程300例(万猿沪10k系列类加载机制)
正式开篇,先拜一拜[谢谢][奸笑]
加粗部分重点掌握,其余这部分做到有印象,用到在做深入了解
类加载的大致流程为:加载-连接-初始化
其中连接又可以细化为:验证-准备-解析
大致介绍一下每一步都是在干啥玩意
加载:读取.class文件里的机器码(java字节码)到JVM的内存中
机器码主要几大来源:
- 本地文件系统
- 网络
- jar,zip,war等压缩文件
- 动态编译的java源文件
- 程序直接生成
验证:主要就是对语义格式等进行验证
验证机器码是否符合java语言规范,比如变量、方法是否重复了,数据类型是否有效了,巴拉巴拉一堆
准备:为类静态变量分配内存并初始化
分配内存分为指针碰撞和空闲列表两种方式,具体介绍留在下一节
初始化就是给变量赋一个默认值,其中有两种类型特殊一丢丢
boolean默认值是false,reference(引用类型)默认值是null
附一张更形象一点的图片
解析:将类、字段、方法、接口等信息的符号引用替换为直接引用
用这个简单的例子解释一下,计算机肯定不认识a是什么玩意,对计算机来说它就是个符号,所以要将它转换成可以直接找到数据1的东西,这个东西就是直接引用。
直接引用分为3种:
- 指针:直接指向存有数据1的内存(指针也可以理解为内存地址)
- 相对偏移量:就是指针相对偏移多少之后能指向数据1的内存
- 间接定位到对象的句柄:就是将符号引用指向句柄,句柄中存着数据1的内存地址
初始化:给类的静态变量赋值
类的构造器方法<clinit>会收集静态变量类型及赋值动作,先收集所有的类型然后按代码先后顺序进行赋值
全流程图:
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com