JVM内存模型

article/2025/7/30 5:04:23

JVM内存模型

说明:

1、JVM由装载子系统、运行时数据区(jvm内存模型)、字节码执行引擎;

2、运行时数据区包含堆、元空间、栈、本地方法栈和程序计数器;

3、堆、元空间是线程共享;方法栈、程序计数器是线程独有,每个线程都会有;

4、运行java Calculate.class之后,先由类装载子系统,将字节码文件加载到运行时数据区;

5、栈帧:一个方法对应栈帧,每调用一个方法,会为该方法生成一个栈帧压入方法栈,方法执行完成栈帧弹出。在弹出栈帧之前根据方法出口找到要返回的调用方法的位置;

6、栈帧主要包含:局部变量表、操作数栈、动态链接、方法出口;

7、栈和堆的关系:如果局部变量是对象类型,堆中存放对象的具体内容、栈(的局部变量表)存放内容的引用(地址);

8、方法区和堆的关系:方法区的静态变量是对象的引用(对象在对象的地址);堆存对象的具体的内容;

JVM内存操作过程

通过一个简短的代码说明在jvm内存操作过程:

package com.example.demo;
​
public class Calculate {
​public int compute(){int a=5;int b=7;
​return (a+b)*9;}
​public static void main(String[] args) {Calculate calculate = new Calculate();
​System.out.println(calculate.compute());}
}
​

使用javap -v Calculate.class命令反编译以上类的字节码文件,如下(部分):

{public com.example.demo.Calculate();descriptor: ()Vflags: (0x0001) ACC_PUBLICCode:stack=1, locals=1, args_size=10: aload_01: invokespecial #1                  // Method java/lang/Object."<init>":()V4: returnLineNumberTable:line 8: 0LocalVariableTable:Start  Length  Slot  Name   Signature0       5     0  this   Lcom/example/demo/Calculate;
​public int compute();descriptor: ()Iflags: (0x0001) ACC_PUBLICCode:stack=2, locals=3, args_size=10: iconst_51: istore_12: bipush        74: istore_25: iload_16: iload_27: iadd8: bipush        910: imul11: ireturnLineNumberTable:line 12: 0line 13: 2line 15: 5LocalVariableTable:Start  Length  Slot  Name   Signature0      12     0  this   Lcom/example/demo/Calculate;2      10     1     a   I5       7     2     b   I
​public static void main(java.lang.String[]);descriptor: ([Ljava/lang/String;)Vflags: (0x0009) ACC_PUBLIC, ACC_STATICCode:stack=2, locals=2, args_size=10: new           #2                  // class com/example/demo/Calculate3: dup4: invokespecial #3                  // Method "<init>":()V7: astore_18: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;11: aload_112: invokevirtual #5                  // Method compute:()I15: invokevirtual #6                  // Method java/io/PrintStream.println:(I)V18: returnLineNumberTable:line 19: 0line 21: 8line 22: 18LocalVariableTable:Start  Length  Slot  Name   Signature0      19     0  args   [Ljava/lang/String;8      11     1 calculate   Lcom/example/demo/Calculate;MethodParameters:Name                           Flagsargs
}
SourceFile: "Calculate.java"
 

分析compute()方法的汇编指令执行:

分析compute()方法的汇编指令执行:

public int compute(); descriptor: ()I flags: (0x0001) ACC_PUBLIC

Code:

stack=2, locals=3, args_size=1

0: iconst_5 //将int类型常量5压入栈

1: istore_1 //将int类型值存入局部变量1

2: bipush 7 //将一个8位带符号整数压入栈

4: istore_2 //将int类型值存入局部变量2

5: iload_1 //从局部变量1中装载int类型值

6: iload_2 //从局部变量2中装载int类型值

7: iadd //执行int类型的加法

8: bipush 9 //将一个8位带符号整数压入栈

10: imul //执行int类型的乘法

11: ireturn //从方法中返回int类型的数据

执行流程:

1、将常量5压入操作数栈;

2、将操作数栈顶的值5存入局部变量表1号位置;

3、将整数7压入操作数栈;

4、将操作数栈顶的值7存入局部变量表2号位置;

5、从局部变量1号位置取数压入操作数栈;

6、从局部变量2号位置取数压入操作数栈;

7、将操作数栈顶的两个数相加,并压入栈顶,此时操作数栈只有一个数是5+7=12;

8、将整数9压入操作数栈;

9、将操作数栈顶的两个数相乘,并压入栈顶,此时操作数栈只有一个数是12*9=108;

10、返回计算结果,compute()方法执行完成;

之后,根据compute()方法对应的栈帧的方法出口获得应该返回的main方法的地址,该栈帧从方法栈中弹出,程序回到main方法中继续执行。


http://www.hkcw.cn/article/RGYIVHmOfJ.shtml

相关文章

【Python】第一弹:对 Python 的认知

目录 一、Python 的背景 1.1. Python 的由来 1.2 Python 的作用 1.3 Python 的优缺点 1.4 Python 的开发工具 一、Python 的背景 1.1. Python 的由来 Python 由荷兰数学和计算机科学研究学会的吉多・范罗苏姆 &#xff08;Guido van Rossum&#xff09;在 20 世纪 80 年代…

动态规划基础

动态规划是一种算法思想&#xff0c;关键是理解思想和什么时候用。 算法思想 动态规划用于解决多阶段决策最优化问题&#xff0c;这类问题类似递推。 1.阶段 将问题分为多个阶段&#xff0c;每个阶段之间有联系&#xff0c;即可递推。一般可按问题求解次序或问题的递归性质划…

WEB3——什么是ABI

怎么获得ABI&#xff1f; 在编译完合约后&#xff0c;可以在左边下面点击复制ABI ABI&#xff08;Application Binary Interface&#xff0c;应用二进制接口&#xff09;是用来让前端或服务端 JavaScript 代码与智能合约进行交互的桥梁&#xff0c;它描述了合约的函数、事件和…

本地部署Ollama DeepSeek-R1:8B,接入Cherry Studio

本地部署Ollama DeepSeek-R1:8B&#xff0c;接入Cherry Studio 本教程为本地部署ollama 环境&#xff0c;运行deepseek-r1:8B 模型&#xff0c;并完成cherry studio接入调用。 实现无网环境也可提问模型 一、ollama 环境安装 通过网盘分享的文件&#xff1a;OllamaSetup.ex…

彻底解决Win11文件资源管理器预览窗格无法预览问题

国内某几个流氓软件&#xff08;W*S、*狗PDF...&#xff09;&#xff0c;耗子尾之&#xff01;&#xff01;&#xff01; &#xff08;转载&#xff09;Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全 https://zhuanlan.zhihu.com/p/4542…

竞争加剧,美团的战略升维:反内卷、科技与全球化

5月26日&#xff0c;美团发布2025年第一季度业绩报告&#xff0c;交出了一份兼具韧性与创新性的成绩单。 报告显示&#xff0c;公司一季度总营收866亿元&#xff0c;同比增长18%&#xff1b;核心本地商业收入643亿元&#xff0c;同比增长18%&#xff1b;季度研发投入58亿元&a…

【unity游戏开发——编辑器扩展】AssetPostprocessor和AssetImporter对导入的资源进行统一的预处理

注意&#xff1a;考虑到编辑器扩展的内容比较多&#xff0c;我将编辑器扩展的内容分开&#xff0c;并全部整合放在【unity游戏开发——编辑器扩展】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 文章目录 前言一、AssetPostprocessor1、主要特点2、常用回调方法3、…

代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法

图论 题目 97. 小明逛公园 本题是经典的多源最短路问题。 在这之前我们讲解过&#xff0c;dijkstra朴素版、dijkstra堆优化、Bellman算法、Bellman队列优化&#xff08;SPFA&#xff09; 都是单源最短路&#xff0c;即只能有一个起点。 而本题是多源最短路&#xff0c;即求多…

CATIA高效工作指南——测量分析篇(一)

一、精准重心分析与实时更新技术 1.1 材料属性与几何体重心关联 在复杂零件设计中&#xff0c;重心控制直接影响产品性能。通过CATIA的材料属性系统可实现动态重心跟踪&#xff1a; ​​密度赋值​​&#xff1a;应用材料 → 选择单个几何体 /依次选择多个几何体→ 指定材质…

【PCB工艺】PCB设计中的基本概念

此文结合实例讲解PCB的设计流程和一些基本概念。 🧱 PCB 是什么? PCB(Printed Circuit Board)(即印制线路板) 是电子元器件的载体,是没有焊接任何器件的“裸板”。 PCB只是板子,没有焊接元件,而PCBA可以理解为焊接好元件的完成板子。 简单点说,PCB 只包含:铜线、电源…

深度学习|pytorch基本运算

【1】引言 pytorch是深度学习常用的包&#xff0c;顾名思义&#xff0c;就是python适用的torch包&#xff0c;在python里面使用时直接import torch就可以调用。 需要注意的是&#xff0c;pytorch包与电脑配置、python版本有很大关系&#xff0c;一定要仔细阅读安装要求、找到…

[Windows] 千库/六图素材下载工具

下载链接 夸克网盘分享&#xff08;点击蓝色自己自行保存下载&#xff09; 由吾爱大神分享一块下载工具 核心功能&#xff1a;无水印下载&#xff0c;圈网站素材覆盖&#xff0c;下载速度飞起&#xff0c;还能同时下载100个素材 使用方法&#xff1a; 双击运行 千库六图下…

SolidWorks 文件打开时电脑卡顿问题分析与解决

最近遇到一个问题就是我点击solid work的文件的时候会将电脑卡住然后电脑开始飞速的加载内存&#xff0c;鼠标移动很卡顿 解决办法&#xff1a; 1.找到资源管理器 当遇到这种情况时&#xff0c;可以尝试通过资源管理器来解决问题。首先&#xff0c;找到任务管理器&#xff08…

CppCon 2014 学习:Hourglass Interfaces for C++ APIs

共享库&#xff08;Shared Libraries&#xff09; 的基本结构和机制。 什么是 Shared Library&#xff1f; 共享库是在多个程序之间共享的一组可执行代码和数据&#xff0c;可以在运行时动态加载。 在 Windows 中通常是 .dll在 Linux 中是 .so&#xff08;Shared Object&…

<3>, 常用控件

目录 一、控件概述 二、QWidget 核心属性 1&#xff0c; 核心属性列表 2&#xff0c;enabled 3&#xff0c;geometry 4&#xff0c;windowTitle 5&#xff0c;windowIcon 6&#xff0c;windowOpacity 7&#xff0c;font 8&#xff0c;toolTip 9&#xff0c;focusPol…

基于微服务架构的社交学习平台WEB系统的设计与实现

设计&#xff08;论文&#xff09;题目 基于微服务架构的社交学习平台WEB系统的设计与实现 摘 要 社交学习平台 web 系统要为学习者打造一个开放、互动且社交性强的在线教育环境&#xff0c;打算采用微服务架构来设计并实现一个社交学习平台 web 系统&#xff0c;以此适应学…

uboot启动流程分析之uboot启动阶段

uboot启动可分为汇编语言执行和C语言执行两个阶段&#xff0c;两个阶段以_main函数为分界。 uboot第一阶段由_start (arch/arm/lib/vectors.S)进入&#xff0c;然后跳转到reset(arch/arm/cpu/armv7/start.S)函数, reset函数进行设置CPU运行模式&#xff0c;关闭中断等一系列CP…

QT学习教程(十一)

​​​​​​实现文件菜单&#xff08;Implementing the File Menu&#xff09; 我们实现与文件菜单有关的槽函数和相关的私有函数&#xff0c;以使文件菜单可以工作&#xff0c;同时管理最近打开文件列表。 void MainWindow::newFile(){if (okToContinue()) { spreadsheet-…

【MATLAB代码】制导方法——平行接近法引导,二维环境,动态目标|附代码的下载链接

平行接近法是一种导引方法&#xff0c;其目标是保持目标瞄准线在空间中的平行移动。 本文所述的代码实现了二维平行接近法导引的动态仿真&#xff0c;模拟导弹追踪移动目标的过程。通过实时调整导弹速度方向&#xff0c;确保其逐渐逼近目标&#xff0c;最终在设定距离内完成拦截…

解决win自动重启(自用,留链接)

2025-05-30修改&#xff0c;如果再出现重启回来修改。没动静就是没事了 1、依据系统事件查看器确认错误代码 事件查看器步骤 &#xff08;上图没啥用&#xff09; 下图错误代码&#xff0c;如果原因一致 2、禁用“用户体验改善计划”点击此处步骤