【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 发展,解决多语言整合问题,提升运行时效率,适用于云原生架构。

 

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值