更多JVM相关知识点详见个人主页【JVM相关】专栏
类加载过程
加载
- 加载阶段是类加载过程的第一步。在这个阶段,JVM会通过全类名获取定义此类的二进制字节流,并将其加载到内存中。这个过程涉及到查找和读取
.class文件,这个文件可以位于本地文件系统、网络、或者其他来源。加载后,JVM会将这个字节流中的静态存储结构转换为方法区的运行时数据结构,并在内存中生成一个代表该类的java.lang.Class对象,这个对象作为方法区这些数据的访问入口。
验证
- 验证阶段的目的是为了确保加载到内存中的类信息是合规的,不会危害虚拟机的安全。这个阶段会进行多个层面的验证,包括文件格式验证(确认字节流是否符合Class文件格式)、元数据验证(检查类的信息是否符合JVM规范)、字节码验证(确保字节码的语义合法)、符号引用验证(确保符号引用与实际存在的类或成员匹配)。如果验证失败,会抛出如
VerifyError、ClassFormatError或UnsupportedClassVersionError等异常。
准备
- 准备阶段是正式为类变量分配内存并设置类变量的初始值阶段。这个阶段会在方法区中为类的静态变量分配内存空间。这些变量包括类级别的静态字段和静态常量。所有的类变量都会被初始化为默认值,如整型的默认值为0,对象引用的默认值为null。如果类变量被
final修饰,那么在这个阶段就会给它赋予程序中指定的值。
解析
- 解析阶段是将常量池中的符号引用替换为直接引用的过程。在这个阶段,JVM会将类、接口、字段和方法的符号引用(即它们的全限定名)转换为直接引用(即它们在内存中的地址或者指针)。这个过程涉及到对类、方法、字段等的查找和链接,确保它们在运行时可以被正确地访问。
初始化
- 初始化阶段是类加载过程的最后一个阶段,这个阶段主要是执行类构造器
<clinit>方法的过程。在这个阶段,JVM会初始化类的静态变量和执行静态代码块中的代码。这是类加载过程中唯一一个需要执行类中Java程序代码的阶段。初始化完成后,类的加载过程就结束了,类就成为了JVM中的一个有效类。
1449

被折叠的 条评论
为什么被折叠?



