什么是 JVM? JVM (Java Virtual Machine)

ops/2025/3/6 23:53:40/

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/ops/163729.html

相关文章

玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…

《Linux C 智能 IO 矩阵:输入输出的自适应数据流转》

1. 标准库IO简介 标准库IO特点:通过操作系统提供的接口(API)和操作系统进行交互。(接近100个函数) 1.1. IO的过程 操作系统:向上为用户提供操作接口,向下为统筹控制硬件。 操作系统的组成&#…

Spring IoC配置(xml+FactoryBean)

文末有本篇文章的项目源文件可供下载 通过Spring IoC容器创建组件类对象的方式主要是构造函数/工厂模式/FactoryBean这三种,其中FactoryBean(标准化工厂类)主要是为了简化工厂模式,因为FactoryBean是一个特殊的组件接口,接口中定义了getObject方法,该方法用于返回由…

Node.js二:第一个Node.js应用

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 创建的时候我们需要用到VS code编写代码 我们先了解下 Node.js 应用是由哪几部分组成的: 1.引入 required 模块:我们可以使用 requi…

MySQL事务,函数,性能,索引

MySQL事务,函数 事务 执行事务:相当于一个业务操作 例如:转账操作,一个用户转出资金,另外一个用户收到增加自己的资金,这两个步骤都需要成功执行才行) # MySQL数据库中默认:一行S…

AI大模型对物联网行业赋能可行关键点

AI大模型(如GPT、BERT等)在物联网(IoT)行业的赋能潜力巨大,能够通过数据分析、智能决策和自动化控制等方式,显著提升物联网系统的效率和智能化水平。以下是AI大模型如何赋能物联网行业的具体方式及解决方案…

基于Matlab/Simulink的两级式光伏并网低电压穿越控制(LVRT)仿真模型

接下来的博客更新主要针对,在新能源并网控制基础上兼具电网电能质量治理控制的控制方向(包括,光伏低电压穿越控制,双馈风力机低电压穿越控制,光伏并网谐波抑制,风力发电无功补偿控制、多功能并网逆变器控制…

筑牢网络安全防线:守护您的数据安全

在数字化时代,数据安全已成为企业和个人不容忽视的重要议题。近日印尼国家数据中心遭黑客袭击的事件,不仅扰乱了机场的移民检查,还影响了众多机构的服务运行。黑客利用恶意软件对数据中心进行攻击,索要巨额赎金,给印尼…