七、虚拟机栈
虚拟机栈出现的背景
1.由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。
2.优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。
内存中的栈与堆
栈是运行时的单位,而堆是存储的单位。
即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪里。
虚拟机栈基本内容
Java虚拟机栈是什么?
Java虚拟机栈(Java Viriual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。
是线程私有的
生命周期
生命周期和线程一致。
作用:
主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。
栈的特点
1.栈是一种快速有效的分配存储=方式,访问速度仅次于程序计数器。
2.JVM直接对Java栈的操作只有两个:
每个方法执行,伴随着进栈(入栈、压栈)
执行结果结束后的出栈工作 。
3.对于栈来说不存在垃圾回收问题。
栈中可能出现的异常
Java虚拟机规范允许Java栈大小是动态的或者是固定不变的。
1.如果采用固定大小的Java虚拟机栈,那每一个线程的Java虚拟机栈容易可以在线程创建的时候独立选定。如果线程请求分配的栈容量超过Java虚拟机允许的最大容量,java虚拟机将抛出一个异常。
2.如果Java虚拟机可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存空间,或者在创建新的线程时没有足够的内存区创建对应的虚拟机栈,那Java虚拟机将会抛出一个OutOfMemoryError异常。
设置栈内存大小
我们可以使用参数-Xss 选项来设置线程的最大空间,栈的大小直接决定了函数调用的最多可达深度。
栈的存储单位
1.每个线程都有自己的栈,栈中的数据都是以栈帧(Stack Frame) 的格式存在。
2.在这个线程上正在执行的每个方法都一一对用一个栈帧。
3.栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。
栈运行原理:
1.JVM直接对JAVA栈的操作只有两个,就是对栈帧的压栈出栈,遵循先进后出,后进先出的原则。
2.在一条活动线程中,一个时间点上,只有一个活动的栈帧。即只有当前在执行的方法的栈帧(栈顶栈帧)是有效的,这个栈帧被称为当前栈帧。(Current Frame),与当前栈帧相对应的方法就是当前方法(Current Method), 定义这个方法的类就是当前类(Current Class)。
3.执行引擎运行所有字节码指令值针对当前栈帧进行操作。
4.如果在该方法中调用了其他方法,对应的新的栈帧会被创建出来,放在栈的顶端,成为新的当前帧。
栈帧的内部结构
每个栈帧中存储着:
1.局部变量表(Local Variables)
2.操作数栈(Operand Stack)或表达式栈
3.动态链接(Dynamic Linjking)(或指向运行时常量池的方法引用)
4.方法返回地址(Return Address) (或方法正常推出或者异常推出的定义)
5.一些附加信息


局部变量表也被称之为局部变量数组或本地变量表
1.定义为一个数字数组,主要用用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各个基本数据类型、对象引用。以及returnAddress类型。
2.由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题。
3.局部变量表所需的容量大小是在编译期确定下来的,并保存在方法的Code属性的maxinum local variables数据项中。在方法运行期间是不会变局部变量表大小的。
局部变量表(Local variables)
1.方法嵌套调用的次数由栈的大小决定。一般来说,栈越大,方法嵌套雕鹰次数越多。对一个函数而言,它的参数和局部变量越多,使得局部变量表膨胀,它的栈帧就越大,以满足方法调用所需传递的信息增大的需求,进而函数调用就会占用更多的栈空间,导致其秦涛调用的次数就会减少。
2.局部变量表中的变量旨在当前方法调用中有效,在方法执行时,虚拟机通过使用局部变量表完成参数值到参数变量列表的传递过程。当方法调用结束后,苏随着方法栈帧的销毁,局部变量表也会随之销毁。
相关文章:
七、虚拟机栈
虚拟机栈出现的背景 1.由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。 2.优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同…...
Linux其他常用命令
Linux其他常用命令查找文件find 命令功能非常强大,通常用在特定目录下搜索符合条件的文件如果省略路径,表示在当前文件夹下查找之前学习的通配符,在使用 find 命令时同时可用演练目标1.搜索桌面目录下,文件名包含1的文件find Desk…...
一次性打包学透 Spring
不知从何时开始,Spring 这个词开始频繁地出现在 Java 服务端开发者的日常工作中,很多 Java 开发者从工作的第一天开始就在使用 Spring Framework,甚至有人调侃“不会 Spring 都不好意思自称是个 Java 开发者”。 之所以出现这种局面…...
1080T、2080T、4070T显卡的深度学习性能测试和结论
先说结论: 4070T显卡FP32的训练和推理速度跟3090应该基本类似。但由于显存12G偏低,4070T不太适合如今的深度学习模型训练(新手列外,大部分模型都能训练起来,耗电也相对很低),更适合测试最新的一…...
SpringBoot搭建SpringMVC项目
前言据我的了解,现在不管是大公司或是小公司,如果使用java开发一个web项目,大部分都会选择使用SpringBoot,关于Springboot的好处,就不在这里过多赘述,总之Springboot有一套完整的生态,从项目构建…...
Prescriptive Analytics for Flexible Capacity Management
3 本节根据Netessine等人(2002年)和Bassok等人(1999年)对我们解决的容量规划问题进行了正式描述。考虑一家以pi(I1,…,I)的单价提供I服务的公司。在每个计划周期t∈{1,……...
超简单的待办事项列表管理器todo
什么是 todo ? todo 是一个自托管的 todo web 应用程序,可让您以简单且最少的方式跟踪您的 todo。📝 老苏觉得和之前介绍的 KissLists 比较像 文章传送门:最简单的共享列表服务器KissLists 官方提供了 Demo 演示站点:https://tod…...
在C#中初测OpencvSharp4
一、配置OpenCV 首先,我们新建一个工程,然后就是给这个工程配置OpenCV了,最简单的方法还是Nuget,来我们右键一个Nuget: 打开Nuget后,你可以直接输入OpenCVSharp4来查找,当然,如果你…...
洛谷P1123 取数游戏(C++)(DFS)
目录 1.题目 题目描述 输入格式 输出格式 输入输出样例 说明/提示 2.AC 1.题目 题目描述 一个N \times MNM的由非负整数构成的数字矩阵,你需要在其中取出若干个数字,使得取出的任意两个数字不相邻(若一个数字在另外一个数字相邻88个格…...
Python Qt6快速入门-嵌入PyQtGraph图表
嵌入PyQtGraph 文章目录 嵌入PyQtGraph1、PyQtGraph介绍2、创建PyQtGraph小部件3、绘图样式配置3.1 背景颜色3.2 线条颜色、线宽和样式配置3.3 线标记(Line Markers)3.4 绘制标题3.5 轴标题3.6 图例(Legends)3.7 轴范围限制3.8 绘制多组数据3.10 画布清空4、更新数据5、总结1、…...
Mac电脑_GitHub提交项目至仓库
第一步(准备工作): Mac 电脑自带 git , 无需安装 1. 创建一个项目 demo1 在 github 上 2. 创建 ssh 密钥 打开终端: ssh-keygen -t rsa -C "your_emailyouremail.com" 此处输入两次密码, 直接…...
Android自定义View实现横向的双水波纹进度条
效果图:网上垂直的水波纹进度条很多,但横向的很少,将垂直的水波纹改为水平的还遇到了些麻烦,现在完善后发布出来,希望遇到的人少躺点坑。思路分析整体效果可分为三个,绘制圆角背景和圆角矩形,绘…...
Python 之 Pandas 分组操作详解和缺失数据处理
文章目录一、groupby 分组操作详解1. Groupby 的基本原理2. agg 聚合操作3. transform 转换值4. apply二、pandas 缺失数据处理1. 缺失值类型1.1 np.nan1.2 None1.3 NA 标量2. 缺失值处理2.1 查看缺失值的情形2.2 缺失值的判断2.3 删除缺失值2.4 缺失值填充在开始之前ÿ…...
【人工智能 AI】什么是人工智能? What is Artificial Intelligence
目录 Introduction to Artificial Intelligence人工智能概论 What is Artificial Intelligence? 什么是人工智能?...
17、触发器
文章目录1 触发器概述2 触发器的创建2.1 创建触发器语法2.2 代码举例3 查看、删除触发器3.1 查看触发器3.2 删除触发器4 触发器的优缺点4.1 优点4.2 缺点4.3 注意点尚硅谷MySQL数据库教程-讲师:宋红康 我们缺乏的不是知识,而是学而不厌的态度 在实际开发…...
内核并发消杀器(KCSAN)技术分析
一、KCSAN介绍KCSAN(Kernel Concurrency Sanitizer)是一种动态竞态检测器,它依赖于编译时插装,并使用基于观察点的采样方法来检测竞态,其主要目的是检测数据竞争。KCSAN是一种检测LKMM(Linux内核内存一致性模型)定义的数据竞争(data race)的工…...
蓄水池抽样算法
蓄水池抽样,也称水塘抽样,是随机抽样算法的一种。基本抽样问题有一批数据(假设为一个数组,可以逐个读取),要从中随机抽取一个数字,求抽得的数字下标。常规的抽样方法是,先读取所有的…...
数据结构预算法之买股票最好时机动态规划(可买卖多次)
一.题目二.思路在动规五部曲中,这个区别主要是体现在递推公式上,其他都和上一篇文章思路是一样的。所以我们重点讲一讲递推公式。这里重申一下dp数组的含义:dp[i][0] 表示第i天持有股票所得现金。dp[i][1] 表示第i天不持有股票所得最多现金如…...
华为OD机试真题Java实现【蛇形矩阵】真题+解题思路+代码(20222023)
蛇形矩阵 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11请注意本题含有多组样例输入。 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Java)真题目录汇总 输入描述:…...
spring Bean的生命周期 IOC
文章目录 1. 基础知识1.1 什么是 IoC ?2. 扩展方法3. 源码入口1. 基础知识 1.1 什么是 IoC ? IoC,控制反转,想必大家都知道,所谓的控制反转,就是把 new 对象的权利交给容器,所有的对象都被容器控制,这就叫所谓的控制反转。 IoC 很好地体现了面向对象设计法则之一 —…...
服务注册与发现完全指南
服务注册与发现完全指南 前言 在微服务架构中,服务注册与发现是实现服务间通信的基础设施。服务注册中心维护着所有服务的实例信息,使得服务消费者能够动态地发现和调用服务提供者。本文将详细介绍服务注册与发现的核心概念、实现机制以及最佳实践。 一、…...
通过用量看板清晰观测各模型API调用成本与消耗
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过用量看板清晰观测各模型API调用成本与消耗 效果展示类,介绍开发者在接入Taotoken后,如何通过平台提供的…...
18 CLIP 论文精读:ViT 如何走向图文多模态?(Learning Transferable Visual Models From Natural Language Supervision)
在前几篇文章中,我们围绕 ViT 的自监督预训练路线进行了连续梳理。MAE 的核心思想是:遮住大部分图像 patch,让模型重建被遮挡区域的像素。BEiT 的核心思想是:先用视觉 tokenizer 把图像转换成离散 visual token,再让模…...
本地AI工具炸场!一周GitHub星标破万,云端AI正在向你的电脑迁移
2026年5月中旬,三个开源项目突然火了: Hermes Agent,连续3天登顶OpenRouter调用量榜首,累计消耗6.72万亿tokens ds4.c,Redis之父Salvatore Sanfilippo专为DeepSeek V4 Flash打造的推理引擎,发布不到一周获2600+星 DeepSeek-TUI,终端AI编程工具,上线四个月获3700+星,…...
为什么你的DeepSeek推理延迟飙升300%?GPU显存碎片化诊断与TensorRT加速实录
更多请点击: https://codechina.net 第一章:DeepSeek推理延迟飙升300%的根因定位 在一次线上A/B测试中,DeepSeek-R1-7B模型的P99推理延迟从平均320ms骤升至1280ms,增幅达300%。该异常首先被PrometheusGrafana告警链捕获ÿ…...
智改数转:制造企业绕不开的必答题
近几年,"智改数转"这个词频繁出现在各地政策文件和行业论坛里。对很多制造企业来说,它已经从"可选项"变成了"必答题"。但真正落地的时候,问题远比口号复杂。先说句实话:多数企业的数字化还停留在表…...
终极指南:如何使用NifSkope轻松编辑游戏3D模型文件
终极指南:如何使用NifSkope轻松编辑游戏3D模型文件 【免费下载链接】nifskope A git repository for nifskope. 项目地址: https://gitcode.com/gh_mirrors/ni/nifskope NifSkope是一款专为游戏开发者设计的开源3D模型编辑器,专注于NetImmerse文件…...
Windows环境OpenCore引导盘制作:7步搞定Hackintosh安装
Windows环境OpenCore引导盘制作:7步搞定Hackintosh安装 【免费下载链接】OpenCore-Install-Guide Repo for the OpenCore Install Guide 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Install-Guide 想在Windows电脑上安装macOS吗?别担…...
乒乓球教程资源合集
【课程教程资料】乒乓球入门必看,全方位发球技巧教学 文件大小: 3.9GB内容特色: 慢镜拆解12种发球,旋转弧线肉眼可见适用人群: 想靠发球直接拿分的业余玩家核心价值: 一周练成对手接不住的“魔鬼发”下载链接: https://pan.quark.cn/s/8d67c2d65358 乒…...
如何快速安装elan:Lean版本管理器的完整指南
如何快速安装elan:Lean版本管理器的完整指南 【免费下载链接】elan The Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan elan是一个专门为Lean定理证明器设计的版本管理工具,它能让你轻松管理多个Lean安装版本。无论你是…...
