JVM(Java Virtual Machine,Java虚拟机)

JVM(Java Virtual Machine,Java虚拟机)是Java平台的核心组成部分,它负责运行Java程序。JVM是一种能够执行Java字节码的虚拟机规范,不同的操作系统(如Windows、Linux、macOS等)上都有相应的JVM实现,这允许Java程序"一次编写,到处运行"(Write Once, Run Anywhere,WORA)。

JVM的主要功能包括:

  1. 加载(Loading):JVM通过类加载器(Class Loader)将Java类的二进制数据从硬盘加载到内存中,并将这些数据转换成JVM内部的数据结构,即Java类在JVM内部的表示,这个过程被称为类的加载。

  2. 链接(Linking):

    • 验证(Verification):确保被加载的类信息符合JVM规范,没有安全方面的问题。
    • 准备(Preparation):为类的静态变量分配内存,并设置默认的初始值。
    • 解析(Resolution):将类的成员变量、方法和接口中的符号引用转换为直接引用。
  3. 初始化(Initialization):执行类的初始化代码(即静态初始化块或静态变量的赋值操作),为类的静态变量赋予初始值。

  4. 执行(Execution):JVM通过解释器或即时编译器(JIT Compiler)将Java字节码转换成机器码,然后在操作系统上执行这些机器码,实现程序的运行。

JVM的架构:

JVM主要由以下几个部分组成:

  • 类加载器(Class Loader):负责加载类的二进制数据到JVM中。
  • 运行时数据区(Runtime Data Areas) :
    • 方法区(Method Area):存储每个类的结构信息,如运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容等。
    • 堆(Heap):所有对象实例以及数组的内存分配都在这里进行,是JVM管理的最大一块内存区域。
    • 栈(Stack):每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个栈帧(Stack Frame),对应着一次次方法的调用。
    • 程序计数器(Program Counter Register):一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。
    • 本地方法栈(Native Method Stacks):与虚拟机栈所发挥的作用非常相似,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。
  • 执行引擎(Execution Engine):负责执行Java字节码,包括解释器和即时编译器(JIT Compiler)。
  • 本地接口(Native Interface):是JVM与外部世界的桥梁,负责与操作系统交互,如访问文件系统等。

总结:

JVM是Java程序能够跨平台运行的关键,它通过加载、链接、初始化、执行Java字节码的方式,在不同的操作系统上实现Java程序的运行。JVM的架构和组成部分确保了Java程序的高效、安全和可靠运行。

相关推荐
IT枫斗者枫哥1 小时前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库
代码方舟1 小时前
Java数据工程:利用天远全网运营商三要素优化线上实名认证合规体验
java·人工智能
BBmmo1 小时前
我的 Java 学习笔记 · 第 7 篇:泛型与通配符
java
独泪了无痕1 小时前
Hutool之RandomUtil:随机数生成的终极利器
java·后端
花开路口1 小时前
深入理解 Java/Kotlin 协变与逆变
java·kotlin
运行时异常1 小时前
【WMS 仓储系统集成 AI Agent 实战】第 7 讲:Vue3 前端工程化——Token 刷新锁、Markdown 渲染踩坑与权限体系
java
她的男孩1 小时前
开放接口限流从 20 改到 200 还是每分钟 20 次:拆完防重放+幂等+限流,我找到 5 个静默失效的坑
java·后端·架构
天天被压力1 小时前
【Python 量化取数指南 #13】Python 把行情落库:sqlite 一键存,回测随用随取
java·人工智能·python
天天被压力1 小时前
【Python 量化取数指南 #14】Python 清洗行情数据:复权停牌对齐,回测不翻车
java·人工智能·python
独泪了无痕1 小时前
开发利器Hutool之MapUtil的使用
java·后端