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

3.jvm的执行流程

自上向下
​编译:.java → .class。
​加载:类加载器加载字节码到方法区,生成Class对象。
​内存分配:对象实例存入堆,方法调用栈帧入虚拟机栈。
​执行:解释器或JIT执行字节码,本地方法通过JNI调用。
​回收:GC自动清理堆内存,优化资源利用

一、编译阶段

​源码转字节码​
Java源代码(.java文件)通过编译器(如javac)转换为与平台无关的字节码文件(.class文件)。字节码包含类结构、方法指令等信息。
​字节码内容:包括魔数(Magic Number)、版本号、常量池(符号引用、字面量)、方法表等。
​验证:编译时进行语法、语义分析,确保符合Java规范。

​二、类加载阶段

类加载子系统(ClassLoader)负责将字节码加载到内存中,分为以下子阶段:

​加载(Loading)​​
通过类全限定名定位.class文件,将二进制数据流转换为方法区的运行时数据结构。
在堆中生成java.lang.Class对象,作为类的访问入口。
​链接(Linking)​​
​验证:检查字节码的合法性(如格式、安全性)。
​准备:为静态变量分配内存并赋默认值(如int初始化为0)。
​解析:将符号引用(如类名、方法名)转换为直接引用(内存地址)。
​初始化(Initialization)​​
执行静态代码块(方法),为静态变量赋实际值。
双亲委派机制:类加载器(Bootstrap→Extension→Application)按层级委托加载,避免重复加载和安全问题。

三、运行时数据区初始化

JVM内存划分为以下区域:

​堆(Heap)​​
存储对象实例和数组,线程共享,是垃圾回收的主要区域。分为新生代(Eden、Survivor)和老年代。
​方法区(Method Area)​​
存储类元信息、常量池、静态变量(JDK8后为元空间Metaspace)。
​虚拟机栈(VM Stack)​​
线程私有,每个方法调用对应一个栈帧,存储局部变量表、操作数栈、动态链接和方法出口。
​程序计数器(PC Register)​​
记录当前线程执行的字节码指令地址。
​本地方法栈(Native Method Stack)​​
支持非Java代码(如C/C++)的调用。
​##四、执行引擎处理
​解释执行​
解释器逐行解析字节码为机器指令,适合快速启动但效率较低。
​即时编译(JIT)​​
热点代码(频繁执行的方法)被编译为本地机器码,提升执行效率。
​本地方法接口(JNI)​​
调用操作系统或硬件相关的本地库(如C/C++实现的功能)。
栈帧执行示例:
以方法calculate()为例:

​操作数栈:临时存储运算中间值(如v1=1加载到栈顶)。
​局部变量表:保存方法参数和局部变量(如v3=(v1+v2)*5计算结果存入变量表)。
​动态链接:将方法调用关联到实际内存地址。
​五、垃圾回收与内存管理
​垃圾回收(GC)​​
​标记-清除:识别无用对象并回收内存。
​分代回收:新生代用复制算法,老年代用标记-整理算法。
​内存交互规则​
通过lock/unlock、read/load等8种原子操作保证主内存与工作内存的一致性。

​源码→字节码​ → 2. ​类加载(加载→链接→初始化)​​ → 3. ​内存分配(堆/栈/方法区)​​ → 4. ​执行引擎(解释/JIT)​​ → 5. ​操作系统指令执行​ → 6. ​GC管理内存释放

相关文章:

  • 16. LangChain实战项目2——易速鲜花内部问答系统
  • C++小课堂——变量的声明,赋值和初始化
  • h5 IOS端渐变的兼容问题 渐变实现弧形效果
  • 深入解析数据倾斜:原因、影响与优化方案
  • 回忆Redis的持久化机制
  • git clone的时候出现出现error
  • 2-1文件描述符
  • C语言学习笔记-初阶(19)猜数字游戏:分支、循环结构的应用
  • 《论负载均衡技术在Web系统中的应用》审题技巧 - 系统架构设计师
  • C++数据结构之数组(详解)
  • 【设计原则】里氏替换原则(LSP):构建稳健继承体系的黄金法则
  • docx.js详细教程:入门到入土,没有之一(持续迭代中....)
  • Spring Cloud Gateway 整合Spring Security
  • 【CSS—前端快速入门】CSS 常用样式
  • 使用 `resolvectl` 配置 DNS 的技术文档
  • 【Python 数据结构 1.零基础复习】
  • QEMU源码全解析 —— 内存虚拟化(23)
  • 蓝桥杯试题:DFS回溯
  • TypeScript 类型声明
  • Kali Linux 2024.4版本全局代理(wide Proxy)配置,适用于浏览器、命令行
  • 打造信息消费新场景、新体验,上海信息消费节开幕
  • 遭车祸罹难的村医遇“身份”难题:镇卫生院否认劳动关系,家属上诉后二审将开庭
  • 《制止滥用行政权力排除、限制竞争行为规定(修订草案征求意见稿)》公开征求意见
  • 中国军网:带你揭开3所新调整组建军队院校的神秘面纱
  • 临港新片区将新设5亿元启航基金:专门投向在临港发展的种子期、初创型企业
  • 梅花奖在上海|舞剧《朱鹮》,剧里剧外都是生命的赞歌