深入Java虚拟机JVM类加载初始化学习笔记("Java虚拟机JVM类加载与初始化深度学习笔记")

原创
ithorizon 6个月前 (10-20) 阅读数 23 #后端开发

Java虚拟机JVM类加载与初始化深度学习笔记

一、JVM类加载概述

Java虚拟机(JVM)是Java程序运行的基础平台,它负责将Java字节码文件(.class)加载到内存中,并为Java程序提供运行时环境。类加载是JVM的一个重要组成部分,它负责将Java类库中的类加载到内存中,并为程序提供类的定义。本文将深入探讨JVM类加载与初始化的过程。

二、类加载器

类加载器(ClassLoader)是JVM用于加载类的组件,它负责将类的字节码文件读取到内存中,并创建对应的Class对象。JVM内置了三种类加载器:Bootstrap ClassLoader、Extension ClassLoader和System ClassLoader。

2.1 Bootstrap ClassLoader

Bootstrap ClassLoader是JVM的根类加载器,负责加载JVM核心库(rt.jar)中的类。它是用原生代码(如C/C++)实现的,不是Java类,故而我们无法直接访问它。

2.2 Extension ClassLoader

Extension ClassLoader负责加载JVM扩展库(jre/lib/ext目录下)中的类。它是由Bootstrap ClassLoader加载的,并继承自ClassLoader类。

2.3 System ClassLoader

System ClassLoader是JVM默认的类加载器,负责加载应用程序类路径(ClassPath)中的类。它是由Extension ClassLoader加载的,并继承自ClassLoader类。

三、类加载过程

类加载过程分为五个阶段:加载、验证、准备、解析和初始化。下面我们逐一介绍这五个阶段。

3.1 加载(Loading)

加载阶段是类加载过程的第一步,它负责将类的字节码文件(.class)读取到内存中,并创建对应的Class对象。加载阶段的核心步骤如下:

1. 通过类的全限定名获取类的二进制字节流。

2. 将字节流成为方法区数据结构。

3. 创建Class对象,并将其放入方法区的类对象池。

3.2 验证(Verification)

验证阶段是类加载过程的第二步,它负责验证字节码文件是否符合JVM规范。验证阶段的核心任务包括:

1. 验证字节码文件格式。

2. 验证字节码文件中的符号引用。

3. 验证字节码文件中的类、字段、方法等是否满足JVM规范。

3.3 准备(Preparation)

准备阶段是类加载过程的第三步,它负责为类中的静态字段分配内存,并设置默认初始值。准备阶段不会执行代码,也不会为实例字段分配内存。

3.4 解析(Resolution)

解析阶段是类加载过程的第四步,它负责将类、接口、字段和方法的符号引用成为直接引用。符号引用是在类加载的第二个阶段(验证阶段)产生的,它指向类、接口、字段和方法的符号名称。直接引用是指向方法区的指针、偏移量或者是指向对象的引用。

3.5 初始化(Initialization)

初始化阶段是类加载过程的最后一步,它负责执行类构造器()方法。()方法是由编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并产生的。当初始化一个类时,如果其超类还没有进行初始化,则需要先触发其超类的初始化。

public class MyClass {

static {

System.out.println("静态代码块");

}

public static void main(String[] args) {

System.out.println("Hello, World!");

}

}

在上面的例子中,当运行main方法时,会先触发MyClass的初始化,然后执行静态代码块中的语句。

四、类加载机制

JVM类加载机制包括三种:懒加载(Lazy Loading)、预加载(Preloading)和重复加载(Reloading)。

4.1 懒加载

懒加载是指类在第一次使用时才进行加载。这种方案可以降低类加载的开销,减成本时间程序的启动速度。

4.2 预加载

预加载是指类在程序启动时预先加载。这种方案可以降低运行时的类加载开销,但或许会增多程序的启动时间。

4.3 重复加载

重复加载是指类在卸载后可以重新加载。这种方案核心用于动态替换类。

五、类加载优化

类加载优化是减成本时间Java程序性能的重要手段。以下是一些常见的类加载优化策略:

5.1 类加载器优化

使用自定义类加载器,可以按需加载类,降低不必要的类加载开销。

5.2 类路径优化

合理配置类路径,避免重复加载类,降低类加载时间。

5.3 类卸载优化

及时卸载不再使用的类,释放内存,减成本时间程序性能。

六、总结

本文详细介绍了Java虚拟机JVM类加载与初始化的过程,包括类加载器、类加载过程、类加载机制以及类加载优化策略。深入懂得JVM类加载与初始化机制,对于减成本时间Java程序性能、优化程序设计具有重要意义。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门