JVM 大致可以划分为四个部门:类加载器(ClassLoader) 、运行时数据区(Runtime Data Area) 、执行引擎(Native Interface) 和 本地库接口(Native Interface)。

-
- 类加载器
负责从文件系统、网络或其他来源加载 Class 文件,将 Class 文件中的二进制数据读入到内存
-
① 启动类加载器(Bootstrap Class Loader)
它是 JVM 的内部 组件,负责加载 Java 核心类库(如java.lang)和其他被系统类加载器所需要的类。启动类加载器是由 JVM 实现提供的,通常使用本地代码来实现。
-
② 扩展类加载器(Extension Class Loader)
它是
sun.misc.Launcher$ExtClassLoader
类的实例,负责加载 Java 的扩展类库 (如 java.util、java.net)等。扩展类加载器通常从java.ext.dirs
系统属性所指定的目录 或 JDK 的扩展目录中加载类。 -
③ 系统类加载器(System Class Loader)
也称为应用类加载器(Application Class Loader),它是
sun.misc.Launcher$AppClassLoader
类的实例,负责加载应用程序的类 。系统类加载器通常从CLASSPATH
环境变量所指定的目录 或 JVM 的类路径中加载类。 -
用户自定义类加载器(User-defined Class Loader)
这是开发人员根据需要自己实现的类加载器。用户自定义类加载器可以根据特定的加载策略和需求来加载类,例如从特定的网络位置、数据库或其他非传统来源加载类。
- 类加载器
-
- 运行时数据区
JVM 在执行 Java 程序时,需要在内存中分配空间来处理各种数据,这些内存区域主要包括方法区、堆、栈、程序计数器和本地方法栈。
- 运行时数据区
-
- 执行引擎
执行引擎是 JVM 的心脏,负责执行字节码 。它包括一个虚拟处理器,还包括即时编译器(JIT Compiler)和垃圾回收器(Garbage Collector)。
- 执行引擎