【JVM —— 01 什么是JVM】

JVM(Java Virtual Machine,Java 虚拟机)是运行 Java 应用程序的虚拟机。它是 Java 技术的核心组件之一,提供了一个抽象计算机模型,使 Java 程序可以在任何安装了 JVM 的系统上运行,而无需修改程序本身。JVM 主要职责包括字节码解释、内存管理、垃圾回收、安全性管理和多线程支持等。

1. JVM 的主要功能

  1. 字节码解释和执行

    • JVM 将编译后的 Java 字节码(.class 文件)解释为机器码并执行,从而实现平台无关性。
  2. 内存管理

    • JVM 负责管理程序运行时所需的内存,包括分配和释放对象的内存空间。JVM 将内存划分为不同的区域,如堆(Heap)和栈(Stack)。
  3. 垃圾回收

    • JVM 自动管理内存,通过垃圾回收机制(Garbage Collection, GC)回收不再使用的对象所占用的内存,从而避免内存泄漏。
  4. 安全性管理

    • JVM 提供了多层次的安全机制,包括类加载器(Class Loader)和安全管理器(Security Manager),保护系统免受恶意代码的攻击。
  5. 多线程支持

    • JVM 支持多线程编程,允许 Java 程序同时执行多个线程,并提供了丰富的多线程控制机制。

2. JVM 的结构

JVM 的结构可以分为以下几个主要部分:

  1. 类加载器子系统(Class Loader Subsystem)

    • 负责加载 Java 类文件,将字节码文件转换为 JVM 可以理解的内部数据结构。
  2. 运行时数据区(Runtime Data Area)

    • JVM 在执行 Java 程序时管理的数据区域,包括:
      • 堆(Heap):存放对象实例和数组。
      • 方法区(Method Area):存放类信息、常量、静态变量等。
      • 虚拟机栈(JVM Stack):存放每个线程的局部变量表、操作数栈等。
      • 本地方法栈(Native Method Stack):支持本地方法的调用。
      • 程序计数器(Program Counter Register):记录当前线程执行的字节码指令的地址。
  3. 执行引擎(Execution Engine)

    • 负责执行字节码,包括解释器(Interpreter)和即时编译器(Just-In-Time Compiler, JIT)。
  4. 本地方法接口(Native Method Interface, JNI)

    • 允许 Java 代码与其他语言(如 C、C++)编写的本地代码进行交互。
  5. 垃圾回收器(Garbage Collector, GC)

    • 负责自动管理内存,回收不再使用的对象。

3. JVM 工作原理

  1. 类加载

    • 通过类加载器将 .class 文件加载到内存中,形成类的元数据。
  2. 字节码验证

    • JVM 对加载的字节码进行验证,确保其格式和语义是合法的。
  3. 字节码执行

    • 通过解释器逐条解释执行字节码指令,或通过 JIT 编译器将热点代码编译为本地机器码执行,提高性能。
  4. 内存管理

    • JVM 在执行过程中动态分配和回收内存,通过垃圾回收机制确保内存使用的高效性。
  5. 异常处理

    • JVM 提供了异常处理机制,在程序运行时捕获和处理异常情况,确保程序的健壮性。

4. JVM 与 JRE 和 JDK 的关系

  • JVM(Java Virtual Machine):是执行 Java 字节码的虚拟机,负责解释和执行 Java 程序。
  • JRE(Java Runtime Environment):包含 JVM 以及 Java 类库和其他支持文件,是运行 Java 应用程序的环境。
  • JDK(Java Development Kit):包含 JRE 和开发工具(如编译器 javac、调试器 jdb),是开发 Java 程序的完整工具包。

 

5. 常见的 JVM 实现和它们的特点

JVM 实现 特点和适用场景 厂商/组织
Oracle HotSpot 高性能、稳定性好,成熟的垃圾回收器和即时编译器,适用于生产环境和大规模部署。 Oracle
OpenJ9 内存效率高、启动速度快,优秀的垃圾回收和即时编译技术,适合云环境和节省资源的应用。 Eclipse Foundation / IBM
Zing 预测性能优秀,专为高并发和大规模应用设计,具有高效的垃圾回收和支持大规模并发的特性。 Azul Systems
GraalVM 支持多语言混合编程,包括 Java、JavaScript、Python 等,集成了高性能的 Graal 即时编译器。 Oracle
Amazon Corretto 免费、长期支持的 OpenJDK 发行版,亚马逊优化,保证了兼容性和安全增强。 Amazon

6. HotSpot 虚拟机的发展历程可以概括如下:

阶段 时间 主要特点和里程碑
初出茅庐 1999年4月 初次在 JDK 中使用,源自于收购的 SmallTalk 虚拟机技术。
野蛮生长 2006年12月 JDK 6 发布,进行了大量虚拟机层面的优化,为后续发展奠定了基础。
稳步前进 2009-2013年 JDK 7 引入 G1 垃圾收集器,吸纳了 JRockit 虚拟机的设计思想,JDK 8 去除永久代并引入 JMC 工具。
百家争鸣 2018-2019年 JDK 11 优化了 G1 垃圾收集器性能,推出 ZGC 和 Shenandoah 新一代垃圾回收器。
拥抱云原生 2019年至今 GraalVM 虚拟机基于 HotSpot 发展,解决多语言整合问题,提升运行时效率,适用于云原生架构。

 

你可能感兴趣的:(JVM,jvm)