当前位置: 首页 > backend >正文

JVM的位置和JVM的结构体系

JVM的位置

JVM是在操作系统上面进行跑,jvm被JRE包含在里面,jvm上面跑的就是java程序。

从图中可以清晰看到 JVM(Java Virtual Machine,Java 虚拟机 ) 的位置:

它处于 JRE(Java Runtime Environment,Java 运行时环境 ) 这一层,是 JRE 的核心组成部分。整体架构里,JVM 在应用程序(图中的多个 “A” )下方,借助 JRE 承接应用程序的运行需求;同时,JVM 位于操作系统(Windows、Linux、Mac 等 )之上,通过操作系统与底层硬件体系(Intel、Spac 等 )交互,起到 “中间桥梁” 作用 —— 让 Java 程序能在不同系统、硬件上,借助 JVM 实现跨平台运行 。简单说,JVM 嵌在 JRE 层,上连应用、下接操作系统,是 Java 程序运行的 “虚拟环境” 核心 。

JVM的体系结构

JVM(Java Virtual Machine,Java 虚拟机 )体系结构主要包含以下关键部分,结合图来看:

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

  • 作用:负责加载 .class 文件(由 Java 源码编译生成),把字节码数据装入 JVM ,并进行校验、准备等操作,将类数据放到方法区 ,让后续执行引擎能使用。

2. 运行时数据区(Runtime Data Area)

是 JVM 执行 Java 程序时管理内存的区域,细分为:

  • 方法区(Method Area):存储类的元数据(如类信息、常量、静态变量等 ),供整个程序共享,不同 JVM 实现对其称呼可能有差异(如 HotSpot 里的 “永久代” 是方法区的一种实现,不过现在多用元空间 )。

  • Java 栈(Java Stack):也叫虚拟机栈,线程私有。每个方法执行时会创建栈帧,用于存储局部变量、操作数栈、方法出口等信息,方法调用和返回对应栈帧的入栈、出栈。

  • 本地方法栈(Native Method Stack):和 Java 栈类似,但为本地方法(用 native 修饰、由非 Java 语言实现的方法 )服务,不同 JVM 实现对其处理有别,有的直接复用 Java 栈。

  • 堆(Heap):JVM 中最大的内存区域,线程共享,几乎所有对象实例和数组都在这分配内存,是垃圾回收(GC)的主要区域,分新生代、老年代等,方便垃圾回收器高效回收内存。

  • 程序计数器(Program Counter):线程私有,记录当前线程执行的字节码指令地址,线程切换后能恢复执行位置,保证程序正常流转,若线程执行的是本地方法,计数器值为 undefined 。

3. 执行引擎(Execution Engine)

负责执行字节码指令,它会把字节码翻译成机器能理解的指令并执行,和运行时数据区协作,从 Java 栈、堆等获取数据,完成计算逻辑,还会结合即时编译(JIT)等优化技术,提升执行效率。

4. 本地方法接口(Native Method Interface)与本地方法库

  • 本地方法接口:作为 Java 代码调用本地方法(非 Java 实现 )的桥梁,让 JVM 能融合其他语言编写的功能。

  • 本地方法库:存放本地方法的具体实现,供本地方法接口调用,实现和操作系统、硬件等底层交互 。

注意!

在本地方法栈,java栈,程序计数器里面是不会产生垃圾的,不然程序会堵死,无法使用,我们常说的调优绝大部分都是在方法区和堆这两个结构里面进行调优。

http://www.xdnf.cn/news/14887.html

相关文章:

  • ASP.NET 安装使用教程
  • 人工智能-基础篇-18-什么是RAG(检索增强生成:知识库+向量化技术+大语言模型LLM整合的技术框架)
  • Spark SQL架构及高级用法
  • Zama 机密区块链协议Litepaper
  • Android Input 系列专题【事件的读取与分发】
  • 408第三季part2 - 计算机网络 - 计算机网络分层结构
  • MySQL——9、事务管理
  • Linux安装java后没法运行
  • StarRocks × Tableau 连接器完整使用指南 | 高效数据分析从连接开始
  • 智能监控算法助力工厂高温高效管理
  • Windows内核并发优化
  • 使用SSH隧道连接远程主机
  • H3C WA6322 FitAP切换为云AP或
  • 不依赖框架,如何用 JS 实现一个完整的前端路由系统
  • 快速掌握Python编程基础
  • Day51 复习日-模型改进
  • 免费PDF处理软件,支持多种操作
  • 深度学习笔记29-RNN实现阿尔茨海默病诊断(Pytorch)
  • 因果语言模型、自回归语言模型、仅解码器语言模型都是同一类模型
  • VS CodeC51 单片机开发环境搭建
  • Django+DRF 实战:从异常捕获到自定义错误信息
  • 从入门到精通:数据库全攻略
  • Jenkins-Publish HTML reports插件
  • 技术与情感交织的一生 (九)
  • Python 的内置函数 reversed
  • WPS中配置MathType教程
  • 数学中微分与导数的理解和区别
  • Linux基本命令篇 —— uname命令
  • 本地部署Dify并结合ollama大语言模型工具搭建自己的AI知识库
  • 垂起固定翼无人机介绍