什么是 JVM? JVM (Java Virtual Machine)

devtools/2025/3/6 23:31:17/

JVM(Java Virtual Machine,Java 虚拟机)是一个虚构出来的计算机,它是一种规范,有自己的指令集,并且在运行时操作各种内存区域。JVM 是 Java 平台的核心组成部分,负责执行 Java 字节码(.class 文件)。

主要功能:

  1. 加载类文件: JVM 的类加载器(ClassLoader)负责从文件系统、网络或其他来源加载 Java 类文件(.class 文件)。
  2. 管理内存: JVM 负责管理程序的内存,包括:
    • 堆 (Heap): 存放对象实例。
    • 方法区 (Method Area): 存放类信息、常量、静态变量、即时编译器编译后的代码等。
    • 虚拟机栈 (VM Stack): 存放局部变量、方法参数、返回值等。每个线程都有自己的虚拟机栈。
    • 本地方法栈 (Native Method Stack): 用于支持 native 方法(使用 C、C++ 等编写的方法)的执行。
    • 程序计数器 (Program Counter Register): 记录当前线程正在执行的字节码指令的地址。
  3. 执行字节码: JVM 的执行引擎负责执行 Java 字节码指令。
    • 解释执行: 逐条解释执行字节码指令。
    • 即时编译 (JIT Compilation): 将热点代码(经常执行的代码)编译为本地机器码,提高执行效率。
    • 自适应优化: JVM 会根据程序的运行情况, 动态地选择解释执行或 JIT 编译.
  4. 垃圾回收 (Garbage Collection): JVM 的垃圾回收器负责自动回收不再使用的对象,释放内存。
  5. 安全管理: JVM 提供了安全机制,例如类加载器的双亲委派模型、字节码校验器等,防止恶意代码的执行。
  6. 提供运行时环境: JVM 为 Java 程序提供了一个与平台无关的运行时环境.

JVM 架构 (主要组件):

  • 类加载器 (ClassLoader): 负责加载类文件。

    • 启动类加载器 (Bootstrap ClassLoader): 加载 Java 核心类库(JAVA_HOME/jre/lib 目录下的 rt.jar 等)。
    • 扩展类加载器 (Extension ClassLoader): 加载 Java 扩展类库(JAVA_HOME/jre/lib/ext 目录下的 jar 包)。
    • 应用程序类加载器 (Application ClassLoader): 加载应用程序的类(classpath 下的类)。
    • 自定义类加载器: 可以自定义类加载器,实现特殊的类加载逻辑。
    • 双亲委派模型: 类加载器在加载类时,会先委托父类加载器加载,只有当父类加载器无法加载时,才由自己加载。
  • 运行时数据区 (Runtime Data Areas): JVM 在运行时管理的内存区域。

    • 堆 (Heap): 存放对象实例。所有线程共享。
    • 方法区 (Method Area): 存放类信息、常量、静态变量、即时编译器编译后的代码等。所有线程共享。
      • 运行时常量池 (Runtime Constant Pool): 方法区的一部分,存放编译期生成的各种字面量和符号引用。
    • 虚拟机栈 (VM Stack): 存放局部变量、方法参数、返回值、操作数栈、动态链接、方法出口等。每个线程都有自己的虚拟机栈。
    • 本地方法栈 (Native Method Stack): 用于支持 native 方法的执行。每个线程都有自己的本地方法栈。
    • 程序计数器 (Program Counter Register): 记录当前线程正在执行的字节码指令的地址。每个线程都有自己的程序计数器。
  • 执行引擎 (Execution Engine): 负责执行字节码指令。

    • 解释器 (Interpreter): 逐条解释执行字节码指令。
    • 即时编译器 (JIT Compiler): 将热点代码编译为本地机器码,提高执行效率。
      • Client Compiler (C1): 优化速度快,但优化程度较低。
      • Server Compiler (C2): 优化速度慢,但优化程度较高。
      • 分层编译 (Tiered Compilation): 根据程序的运行情况,选择不同的编译器进行优化。
    • 垃圾回收器 (Garbage Collector): 负责自动回收不再使用的对象。
      • Serial GC: 单线程垃圾回收器。
      • Parallel GC: 多线程垃圾回收器。
      • CMS GC (Concurrent Mark Sweep): 并发标记清除垃圾回收器。
      • G1 GC (Garbage-First): 一种面向服务端应用的垃圾回收器。
      • ZGC: 一种低延迟垃圾回收器.
      • Shenandoah: 一种低延迟垃圾回收器.

JVM 的优点:

  • 平台无关性 (Write Once, Run Anywhere): Java 字节码可以在任何安装了 JVM 的平台上运行。
  • 自动内存管理 (Garbage Collection): 开发者无需手动管理内存,降低了内存泄漏的风险。
  • 安全性: JVM 提供了安全机制,防止恶意代码的执行。
  • 性能优化 (JIT Compilation): JVM 可以将热点代码编译为本地机器码,提高执行效率。

JVM 的缺点:

  • 性能开销: JVM 本身需要占用一定的系统资源。
  • 启动时间: JVM 的启动时间可能比较长。
  • 复杂性: JVM 的内部结构比较复杂,理解和调优需要一定的专业知识。

JVM、JRE 和 JDK 的关系:

  • JDK (Java Development Kit): Java 开发工具包,包含了 JRE 以及开发 Java 程序所需的工具(如编译器 javac、调试器 jdb、javap 等)。
  • JRE (Java Runtime Environment): Java 运行环境,包含了 JVM 以及 Java 核心类库。
  • JVM (Java Virtual Machine): Java 虚拟机,负责执行 Java 字节码。
+-------------------------------------------------+
|                  JDK (开发工具)                   |
| +---------------------------------------------+ |
| |             JRE (运行环境)                  | |
| | +-----------------------------------------+ | |
| | |       JVM (虚拟机)                        | | |
| | +-----------------------------------------+ | |
| | +-----------------------------------------+ | |
| | |          Java 核心类库                    | | |
| | +-----------------------------------------+ | |
| +---------------------------------------------+ |
| +---------------------------------------------+ |
| |  javac, java, javadoc, jar, jdb, ...        | |
| +---------------------------------------------+ |
+-------------------------------------------------+

常见的 JVM 实现:

  • HotSpot VM: Oracle 官方提供的 JVM,也是目前使用最广泛的 JVM。
  • OpenJDK: HotSpot VM 的开源版本。
  • GraalVM: Oracle 提供的另一个高性能 JVM,支持多种语言。
  • J9 VM: IBM 提供的 JVM。
  • Zing VM: Azul Systems 提供的 JVM,专注于低延迟和高吞吐量。
  • Microsoft JVM: 微软提供的JVM.
  • Amazon Corretto: 亚马逊提供的OpenJDK发行版.

总结:

JVM 是 Java 平台的核心组成部分,它是一个虚拟的计算机,负责加载类文件、管理内存、执行字节码、垃圾回收、安全管理等。JVM 的平台无关性、自动内存管理、安全性和性能优化等特性使得 Java 成为一种流行的编程语言。


http://www.ppmy.cn/devtools/165099.html

相关文章

物联网中水位计顶级功能有哪些

在物联网(IoT)应用中,水位计是用于监测水体(如水库、河流、湖泊、水井等)水位变化的关键设备。顶级功能的水位计不仅需要高精度和可靠性,还应具备智能化、远程监控和数据分析能力。以下是物联网中水位计的顶…

HTML在网页开发中的应用与重要性

## 摘要 HTML(HyperText Markup Language)是网页开发的基础语言之一,它定义了网页的结构和内容。随着互联网的快速发展,HTML不断演进,从HTML4到HTML5,其功能和特性得到了极大的增强。本文将探讨HTML在网页…

Docker 的应用场景

互联网各领域资料分享专区(不定期更新): Sheet 前言 Docker的基本概念,它主要是容器化技术,所以应用场景和容器化的优势相关。比如,环境一致性、快速部署、资源隔离这些特点。可能的应用场景包括开发环境搭建、持续集成/持续部署(CI/CD)、微服务架构、测试环境隔离等等。…

LeetCode 解题思路 10(Hot 100)

解题思路: 上边: 从左到右遍历顶行,完成后上边界下移(top)。右边: 从上到下遍历右列,完成后右边界左移(right–)。下边: 从右到左遍历底行,完成后…

wxWidgets GUI 跨平台 入门学习笔记

准备 参考 https://wiki.wxwidgets.org/Microsoft_Visual_C_NuGethttps://wiki.wxwidgets.org/Tools#Rapid_Application_Development_.2F_GUI_Buildershttps://docs.wxwidgets.org/3.2/https://docs.wxwidgets.org/latest/overview_helloworld.htmlhttps://wizardforcel.gitb…

Redis 篇

一、数据结构 二、持久化方式 Redis 提供了两种主要的持久化方式,分别是 RDB(Redis Database)和 AOF(Append Only File),此外,还可以同时使用这两种方式以增强数据安全性,以下为你…

java环境部署

java环境部署 一、准备工作 jrejdkeclipse jdk下载:21和1.8-----官网:Oracle:Java 下载 |神谕 该处选择要依据自身的系统类型选择下载 idea的下载安装:IntelliJ IDEA | Other Versions 二、安装 三、环境配置 四、使用 五、i…

FastGPT 引申:常见 Rerank 实现方案

文章目录 FastGPT引申:常见 Rerank 实现方案1. 使用 BGE Reranker2. 使用 Cohere Rerank API3. 使用 Cross-Encoder 实现4. 自定义 Reranker 实现5. FastAPI 服务实现6. 实现方案总结 FastGPT引申:常见 Rerank 实现方案 下边介绍几种 Rerank 的具体实现…