七、虚拟机栈

news2024/10/1 19:30:35

虚拟机栈出现的背景

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.局部变量表中的变量旨在当前方法调用中有效,在方法执行时,虚拟机通过使用局部变量表完成参数值到参数变量列表的传递过程。当方法调用结束后,苏随着方法栈帧的销毁,局部变量表也会随之销毁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369760.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

XC7K70T-1FBG676I【FPGA】XC3S200-4FTG256C参数XC7K70T-2FBG676C

Kintex-7 FPGA为快速增长应用和无线通信提供最优性价比和低功耗。Kintex-7 FPGA允许设计人员构建卓越带宽和12位数字可编程模拟,同时满足成本和功耗要求。Kintex-7内置支持8通道PCI Express (Gen1/Gen2),用于连接主机系统。7系列器件利用Xilinx统一架构保…

如何实现外网跨网远程控制内网计算机?快解析来解决

远程控制,是指管理人员在异地通过计算机网络异地拨号或双方都接入Internet等手段,连通需被控制的计算机,将被控计算机的桌面环境显示到自己的计算机上,通过本地计算机对远方计算机进行配置、软件安装程序、修改等工作。通俗来讲&a…

超图软件许可过期后的处理

超图软件许可过期,博主犯了一个很低级的错误,特此发帖记录一下。 按照官网的介绍,直接申请新的许可,配置本地许可很简单的。 1.打开桌面软件会弹出以下的框。 2.配置本地许可对话框 3.切换到激活更新页面 4.选择激活文件即可 以…

内容团队如何快速出稿

对于内容团队而言,每个内容选题就相当于一个小项目,它们并非简单的线性工作流,相反其复杂程度不亚于一个小型工厂。一个内容选题会涉及内容形式,选题类型等多个变量,这些变量因素组合起来就是十几种不同类型的工作流。…

我花6个月从0开始面上大厂自动化测试岗,拿个20K不过分吧?

我是着急忙慌的准备简历——3年软件测试经验,可独立测试大型产品项目,熟悉项目测试流程...薪资要求? 3年测试经验起码能要个20K吧?” 我一个朋友跟我说: “我加班肝了一页半简历,投出去一周,…

03--框架基础

1、目录结构1)创建项目使用测试号或小程序申请成功之后的appid即可,注意这里选择“不使用云服务”,选择javascript模板工具结构如图目录结构小程序包含一个描述整体程序的 app 和多个描述各自页面的 page。一个小程序主体部分由三个文件组成&…

python自学之《21天学通Python》(13)——第16章 数据库编程

数据库指的是以一定方式存储在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。而我们平时所说的数据库实际上是包含了数据库管理系统(DBMS)的,数据库管理系统是为管理数据库而设计的软件系统,它一…

jvm调优参数配置

在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标: GC的时间足够的小 GC的…

Homekit智能家居DIY一WIFI智能插座

WiFi智能插座对于新手接触智能家居产品更加友好,不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷,智能插座就是其中之一,比如外出忘记关空调,可以拿起手机远程关闭。 简单说就是:插座可以连接wi…

如何外网登录管理云通信短信网关平台?——快解析映射方案

云通信(Cloud Communications )是基于云计算商业模式应用的通信平台服务,简单易用,满足企业一键群发场景,支持多种语言SDK和API 接入。各个通信平台软件都集中在云端,且互通兼容,用户只要登录云通信平台,不…

【玩家心得】Smurf Society 游戏攻略

在深林的深处,生活着一群无忧无虑、快乐的小精灵,浑身蓝色,叫做蓝精灵。蓝精灵住在自己村子里蘑菇屋里,精灵爸爸、精灵妹妹、笨笨、乐乐等使得精灵村每天都欢声笑语。可是,在森林深处的城堡里住着一个邪恶的巫师格格巫…

量化择时——资金流择时策略(第1部分—因子测算)

文章目录资金流模型概述资金流模型的有效性逻辑资金流向指标MFI(Money Flow Index)MFI指标测算测算规则测算结论资金流模型概述 通常,资金流是一种反映股票供给信息的指标,宏观上来讲,我们知道一个道理:僧…

仅花半年时间,他从外包月薪5K到阿里月薪15K,究竟经历了什么?

背景介绍:“渣渣”二本,95年Java程序员**外包类型:**传统外包公司**内容简介:**朋友从一个传统公司是如何修仙到阿里巴巴?分享一些他的真实经历,希望对你有帮助。**学习路线:**基础(…

电阻串联的作用

电阻串联常见作用 第一个作用是:阻抗匹配: 因为信号源的阻抗很低,跟信号线之间阻抗不匹配,串上一个电阻后,可以改善匹配情况,以减少反射,避免振荡等。 常见的阻抗匹配方法 1、使用变压器来做…

(十)、kityminder支持富文本的编辑

前段时间,去试用了下processon 上的脑图功能,发现人家这块确实已经做的好强大了。而且他的节点竟然还可以支持单独某个文本的颜色字体的设置,这个可是连xmind,本身都没有实现的功能的。所以想着学习下人家的实现看看是否能够借鉴到…

会声会影2023电脑版下载及系统配置要求

平时大家可能会经常听到有人说会声会影,但是很多人都不知道这是什么软件。其实听它的名字就知道这是一款和声音、影像有关系的软件。下面,小编就来给大家具体介绍一下这款软件吧。 会声会影是一套操作简单的DV、HDV影片剪辑软件。会声会影不仅完全符合家…

Python并发编程-事件驱动模型

一、事件驱动模型介绍 1、传统的编程模式 例如:线性模式大致流程 开始--->代码块A--->代码块B--->代码块C--->代码块D--->......---&…

利用InceptionV3实现图像分类

最近在做一个机审的项目,初步希望实现图像的四分类,即:正常(neutral)、涉政(political)、涉黄(porn)、涉恐(terrorism)。有朋友给推荐了个github上…

ubuntu:20.04编译arrow

1)拉取代码 git clone https://github.com/apache/arrow.git 2)切换分支 git checkout apache-arrow-11.0.0 3)拉入测试数据并设置环境变量 pushd arrow git submodule update --init export PARQUET_TEST_DATA"${PWD}/cpp/submodules/parquet-testing/da…

java程序员要了解的sql语句优化技巧大全

sql语句规范 MySQL在Linux系统下数据库名,表名,存储过程名,函数名称,触发器名称等区分大小写,列名不区分大小写,原因是这些操作系统下文件名称区分大小写。 MySQL在Windows系统下全部不区分大小写&#xf…