JVM 类加载机制概述
1:类加载机制概述:
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。
2:懒加载
windows的懒加载方式
3:及时加载
4:类加载器,自定义的类加载器。网络类加载器读取网络上的数据。
OSGI 模块化加载。
5:类加载的过程
6:加载过程
01:通过一个类的全限定名来获取定义此类的二进制流。(加载源 :文件-Class文件-jar包,网络,计算生成一个二进制流 --代理模式$Proxy,由其他文件生成--jsp,数据库)。
02:将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。(spring-bean转为数据源。)
03:在内存中生成一个代表这个类的Class对象,作为这个类的各种数据的访问入口。
在加载的过程中,类的验证和连接就开始进行了。
7:连接过程
验证过程
验证时连接的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
文件格式校验
元数据验证
字节码验证
符号引用验证
准备阶段
准备阶段正式为类变量分配内存并设置 变量的初始值,这些变量使用的内存都将在方法区中进行分配。
这里的初始值并非我们制定的值,而非其默认值。但如果被final修饰,那么在这过程中,常量值会被一同指定。
int 初始值为0
Boolean初始值为false
Float初始值为 0.0
Char初始值为 ‘0’
抽象数据类型初始值为null
class hello{ public static int a=10; }
解析阶段:
解析阶段是虚拟机将常量池中的符号引用替换为直接引用的过程。
类或者接口的解析。
字段或者接口的解析。
类方法解析
接口方法解析
8:初始化阶段