java的类加载机制

虚拟机的类加载过程, 分为以下几步:

加载

虚拟机从class文件中读取字节流

验证

由于class文件并非强制java源码编译而来,因此处于虚拟机自身安全考虑, 需要对其进行安全检查。其中验证包括以下几个过程:
包括文件验证,元数据验证,字节码验证,符号引用验证

准备

正式为类变量分配内存,并对类变量进行初始化赋值的过程

当变量为final修饰时, 在这一步会出现不同,如果没有final修饰,会给static变量先赋值一个默认值,后续会进行设定值赋值。如果有final修饰, 在会此处直接赋值

解析

虚拟机将常量池中的符号引用,替换为直接引用的过程
符号引用:不一定已经加载到内存中,只要能无歧义的找到目标
直接引用:已经加载到内存中,主要是指针等

初始化

java的类加载器, 只有两种形式,
启动类加载器(Bootstrap ClassLoader),使用c++编写,是虚拟机的一部分
其他所有的类加载器,使用java编写,统一实现了ClassLoader这个抽象类

细分:
包括启动类加载器,扩展类加载器和应用程序类加载器

你可能感兴趣的:(java的类加载机制)