运行时数据区之虚拟机栈

【JVM】_3_运行时数据区(程序计数器、虚拟机栈、操作数栈、本地方法栈) 3.运行时数据区概述&程序计数器&虚拟机栈 运行时数据区概述 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQKPPBPz-1604110818019)(https://i.loli.net/2020/09/28/86T94M71fSiX35o.png)] 内存是非常重要的系统资源,是硬盘和CPU的中间仓库和桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。 不同的JV 阅读详情

概述

 Java虚拟机栈(Java Virtual Machine Stack)。每个线程在创建时都会创建一个虚拟机栈,用来保存一个个栈帧,对应着一次次的Java方法调用。
在这里插入图片描述

 

生命周期:

  虚拟机栈是每个线程私有的,因此生命周期与线程一致

 

作用:

  管理Java程序的运行,虚拟机栈保存方法的局部变量、部分结果,并参与方法的调用和返回。

 

优点:

  1.是一种快速有效的分配存储方式,访问速度仅次于 程序计数器
  2.不存在垃圾回收机制(由于操作仅支持pop、push)

 

开发常见异常:

 JVM规范中 允许 Java虚拟栈的大小是动态的 或者 固定不变的

  1.当 Java栈 固定大小时,则每一个线程的Java虚拟机栈容量都可以在线程创建时确定。但当线程请求过多,分配的栈容量超过了Java栈允许的最大容量,则JVM会抛出 StackOverflowError 异常

  2.当 Java栈 动态扩展时。若在尝试扩展却无法申请到足够的内存,或创建新的线程时没有足够的内存来创建其虚拟机栈时,则JVM会抛出OutOfMemoryError异常

设置栈大小

  -Xss

 

虚拟机栈的存储单位:栈帧

 栈中的数据 以 栈帧 的格式存在。栈帧作为一个内存区块,是一个数据集,用来维系方法执行过程中的各种数据信息。

​

​ 此时线程正在执行的每个方法都对应着一个栈帧。

 

运行原理:

在这里插入图片描述

  在一个活动线程中,一次只有一个活动的栈帧。即正在执行方法的栈帧【又叫栈顶栈帧】是有效的,这个栈帧称之为当前栈帧(Current Frame),与当前栈帧相对应的方法就是当前方法(Current Method),定义该方法的类便是当前类(Current Class)

执行引擎运行的所有字节码指令只针对当前栈帧进行操作。

  如果在该方法中调用了其他方法,对应新的栈帧会被创建出来,放在栈的顶端,成为新的当前栈帧

  由于每个线程都含有自己的栈帧,因此栈帧是不允许存在相互引用的。

  如果当前方法调用了其他方法,方法返回时,当前栈帧会传回此方法的执行结果给前一个栈帧,然后JVM会丢失当前栈帧,使得前一个栈帧重新成为当前栈帧。

  Java方法由两种返回函数的方式,一种是正常的函数返回,return指令。一种是抛出异常。无论是什么方式,都会导致栈帧被弹出。

 

栈帧内部结构:

在这里插入图片描述

​  栈帧存储着

  1.局部变量表(Local Variables)

  2.操作数栈(Operand Stack)

  3.动态链接(Dynamic)

  4.方法返回地址(Return Address)

  5.一些附加信息

 

局部变量表

​  又名 局部变量数组、本地遍历表

​  局部变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量。 这些数据类型包括8大基本数据类型、对象引用(reference)、return Address类型。

 局部变量表所需的容量大小是在编译期间 确定下来,并保存于方法中Code属性的 maximum local variables 数据项中。并且在方法运行期间不会改变局部变量表的大小的。

 局部变量表中的变量只有在当前方法调用期间有效。原理:虚拟机通过使用局部变量表完成参数值到参数变量列表的传递过程。当方法调用结束后,随着对应栈帧的销毁,局部变量表也会随之销毁。

​
 

局部变量表中,最基本的存储单元是Slot(变量槽)

 其中存放的32位以内的类型(包括returnAddress类型)只占用一个slot,64位类型(long&double)占用两个slot。

 JVM会为每一个Slot都分配一个访问索引,通过这个索引即可成功访问到局部变量表中所指定的局部变量值。

 当一个实例方法被调用时,它的方法参数和方法体内定义的局部变量将会被按顺序复制 到局部变量表中的每一个slot中。尽管64位类型占有两个slot,也只需要一个索引(前索引)。

 若当前帧是由构造方法或实例方法创建的,则该对象引用this将存放在index[0]的slot处。

 栈帧中的局部变量表的slot是可以重复使用的。当一个局部变量过了其作用域,那么在其作用于之后申明的新的局部变量就很有可能复用过期局部变量的槽位,从而达到节省资源的目的。

​ 在栈帧中,与性能调优关系最为密切的部分便是局部变量表。在方法执行时,虚拟机使用局部变量表完成方法的传递。

​  局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。

​  变量的相关说明:

​   1.成员变量:在使用前,会默认初始化赋值。

​    类变量:在类加载器的Linking的准备阶段,会默认赋值。

​    实例变量:对象的创建,会在堆空间中分配实例变量空间,并默认赋值。

​   2.局部变量: 使用前必须显现赋值!否则,编译不通过。

​

 

操作数栈

 操作数栈(Expression Stack),又名表达式栈。

 主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。

 在方法执行过程中,操作数栈根据字节码指令,往战中写入数据或提取数据。

 某些字节码指令将值 入栈,其余字节码指令将操作数取出栈。使用后再将结果压入栈。比如:执行复制、交换、求和等操作。

 操作数栈是JVM执行引起中的一个工作区。当一个方法刚开始执行时,一个新的栈帧随之产生,此时该方法的操作数栈为空。

 每一个操作数栈都会拥有一个明确的栈深度用于存储数值,其所需的最大深度在编译器便定义好了,保存于 方法中Code属性的max_stack值。

 栈可以存放任何Java数据类型。其中32bit占一个栈单位深度。64bit占两个栈单位深度。

 若被调用的方法带有返回值,则返回值将会被压入当前栈帧的操作数栈上,并更新PC寄存器中下一条需要执行的字节码指令。

​ 栈顶缓存技术

 由于操作数存储在内存中,于是需要经常地执行读/写操作,则必然会影响执行速度。为了解决这个问题,HotSpot JVM地设计者提出 栈顶缓存技术 (Tos,Top-of-Stack Cashing)技术。

​ 将栈顶元素全部缓存在物理CPU的寄存器中,以此降低对内存的读/写次数,提升执行引擎的执行效率。
 

动态链接

 每一个栈帧为了支持当前方法的代码能够实现动态链接(Dynamic Linking),栈帧内部都包含一个指向 运行时常量池 中关于该栈帧所属方法的引用。比如:invokedynamic指令。

 当Java源文件被编译到字节码文件时,所有的变量和方法引用都会被作为符号引用保存在class文件常量池里。比如:描述一个方法调用另外的方法时,就是通过常量池中指向方法的符号引用来表示的。而动态链接的作用便是为了将这些符号引用转化为调用方法的直接引用。

方法的调用

 1.静态链接:

  当一个字节码文件被装载JVM内部时,如果被调用的目标方法在编译器可知,且在运气期保持不变时。这种情况下将调用方法的符号引用转换成直接引用的过程。

 2.动态链接:

  如果被调用的方法在编译器无法确定下来。即只有在程序运行期间将调用方法的符号引用转化成直接引用,而这种引用的转换具备动态性。

绑定机制:

 绑定是一个字段、方法或者类在符号引用被替换为直接引用的过程。【仅发生一次】

分类:

 早期绑定:

  被调用的目标方法如果在编译可知,且运行期保持不变时,便可将该方法与所属类型进行绑定。由于明确了被调用的目标方法,则可以使用静态链接的方式将符号引用为直接引用。

 晚期绑定:

  如果被调用的方法在编译器无法被确定下来,只能在程序运行期根据实际的类型绑定相关的方法。

虚方法和非虚方法

 Java中任何一个普通的方法都具备虚函数的特征。

 非虚方法:

  如果方法在编译期就确定了具体的调用,并且该调用在运行时是不可变的。(不能被重写、确定下来的方法)

【静态方法、私有方法、final方法、实例构造器、父类方法】

 虚方法:

  不同于非需方法的方法。

 

JVM提供了以下方法调用指令:

 普通调用指令:

  1.invokestatic 调用静态方法,解析阶段确定唯一方法版本

  2.invokespecial 调用方法、私有、父类方法,解析阶段确定唯一方法版本

  3.invokevirtual 调用所有的虚方法

  4.invokeinterface 调用接口方法

普通调用指令的四种指令都固化在JVM内部,调用执行不可人为干预。并且invokestatic指令和invokespecial指令称为非虚方法,其它的[不包含final修饰的] 称为虚方法。

 动态调用指令

  5.invokedynamic 动态解析出需要调用的方法,然后执行

该动态调用指令由用户确定方法版本。

 

方法重写的本质:

 1.找到操作数栈顶的第一个元素所执行的对象实际类型,记为 C

 2.若在类型 C 中 找到与常量中描述符合简单名称都相符的方法,则进行访问权限校验,如果通过则返回这个方法的直接引用,查找过程结束。若不通过,则返回java.lang.IllegalAccessError异常。

IllegalAccessError异常:程序试图访问或修改一个属性、调用一个方法。而该属性、方法并没有足够的权限访问。这是则会引起编译异常。如果在运行期间发生这类错误,则说明一个类发生一兼容的改变。

 3.否则,按照继承关系从下往上一次对C的各个父类,进行第二步的搜索与验证。

 4.始终都未找到合适的方法,则排除java.lang.AbstractMethodError异常。

 

虚方法表

​ 由于频繁地使用动态分派。若每次动态分派都需要重新在类的方法元数据中搜索适合的目标,则会影响执行效率。故JVM采用在类的方法区建立一个虚方法表(virtual method table)来实现。听过索引表代替查找。

 【每个类中都有一个虚方法表,并且表中存放着各个方法的实际入口】

 何时被创建?

  在类加载的链接阶段被创建,并初始化。当类的变量初始值准备完成后,JVM会把该类的方法表也初始化完毕。

 

方法返回地址

 用于存放调用该方法的PC寄存器的值。

 

 当方法结束时,都会返回到该方法被调用的位置。此时会出现两种情况

  1.而当方法正常退出时,调用者的程序计数器的值将作为返回地址(即调用该方法指令的下一条指令地址。),传递给上层的方法调用者。

   – 使用哪一种指令还需根据方法返回值的实际数据类型而定。

   – 在字节码指令中,返回指令包含ireturn【返回值是boolean、byte、char、short、int类型】、lreturn、freturn、dreturn、areturn。并且将会有一个reutrn指令来供声明void方法、实例初始化方法、类和接口的初始化方法使用。

 2.而通过异常退出时,返回地址则通过异常表确定,而栈帧一般不会保存这部分信息。

二者的区别:异常完成退出的并不会给三层调用者产生任何的返回值。

本质上,方法的退出就是当前栈帧出栈的过程。此时,需要恢复三层方法的局部变量表、操作数栈、将返回值压入调用者栈帧的操作数栈、设置PC寄存器值等,让调用者方法进行执行。

 
​

一些附加信息

 栈帧还允许携带与JVM实现相关的一些信息。如:对程序调式提供支持的信息。

  注:不一定存在,主要由JVM控制。

首个基于LBS方案的3D传感器,VoxelSensor解析 该传感器将结合OQmented的Lissajous模式的MEMS扫描镜,与每帧逐行工作的光栅扫描相比,Lissajous轨迹扫描速度更快,并且能耗很低,它可以更快地捕获完整的场景和快速移动,并且需要更少的数据处理,可满足AR/VR对于低延迟、高效率的需求。简单来讲,Switching Pixels的区别是专注于识别激光事件,性能比普通事件相机更好,但也可以使用事件相机的算法。在具体应用中,它需要在X和Y方向发射一个或多个脉冲光束,以在X和Y轴上定位,而Z轴,也就是深度,则是通过计算光返回的时间来测量。 阅读详情

相关推荐

Synopsys工具filter命令:从数据筛选到高效IC设计的实战指南

在数字集成电路设计流程中,数据筛选与查询是工程师处理海量网表、时序报告和设计约束的核心需求。其原理在于通过声明式查询语言,直接对设计对象(如单元、网络、路径)的属性进行逻辑判断与模式匹配,从而精准定位目标。这种技术价值在于将工程师从繁琐的过程式脚本循环中解放出来,大幅提升代码可读性与运行效率,直接调用工具内置的高性能查询引擎。在实际应用场景中,它广泛用于物理与时序联合分析、层次化模块操作、动态约束生成以及自动化报告生成。本文聚焦于Synopsys工具链中filter命令的高阶用法,深入解析其表达式语法、正则

weixin_28007513的博客 577

JVM系列(七):虚拟机栈的相关知识介绍

虚拟机栈也称为Java栈,Java每个main方法被执行的时候,JVM都会同步创建一个栈帧(Stack Frame),通过存储局部变量表、操作数栈、动态链接、方法出口等信息来支撑和完成方法的执行。栈帧就是虚拟机栈中的子单位。栈其实只有入栈和出栈两种操作。......

IT技术分享社区 1148

48V电动车电池包拆解:硬核入门BMS硬件设计与故障排查

BMS(电池管理系统)是锂电应用的核心安全与性能保障模块,其本质是融合电化学、模拟电路、嵌入式控制与热管理的交叉系统。理解BMS不能止步于SOC算法或通信协议,而需回归硬件本体——从电压采样精度、MOSFET驱动时序、被动均衡散热设计到NTC热耦合布局,每一处物理实现都直接决定系统可靠性。48V平台因兼具安全性(<60V ELV)、复杂度(13–14串)与产业普及性,成为BMS工程实践的理想标本。本文聚焦真实电池包中的PCB级设计缺陷识别、关键参数现场验证(如±5mV采样误差、5mΩ导通内阻)、UART协议

weixin_29191081的博客 236

Java 垃圾回收

垃圾回收算法: 第一步,确认垃圾的步骤 1.引用计数法 就是在程序运行过程中,当一个变量被引用的时候,对这个变量进行计数,被引用一次的时候,这个时候这个变量的计数器就加一,当这个对象的引用被释放了不进行引用了,此时计数器就减一,当计数器为0的时候,此时进行垃圾回收,回收这个变量 这种垃圾回收算法, 优点: 实现简单,使用的过程比较方便,当进行垃圾回收只需要关注计数器的情况,不需要进行全...

drsbbbl的博客 642

从仿真到流片:手把手教你优化65nm CMOS电荷泵的电流匹配与稳定性

本文详细介绍了在65nm CMOS工艺下优化电荷泵电流匹配与稳定性的工程实践指南。通过蒙特卡洛仿真、运放反馈结构版图技巧和全差分结构设计,实现优于1%的电流匹配精度和±2%以内的电流稳定性,特别针对current mismatch问题提供了有效的解决方案。

weixin_42522320的博客 417

Visio 2013安装遇阻?手把手教你搞定注册表权限错误1402(附64位系统特殊处理)

本文详细解析了Visio 2013安装过程中常见的注册表权限错误1402问题,特别是在64位系统下的特殊处理方法。通过分步指导如何修改注册表权限、处理Wow6432Node分支以及使用高级工具如subinacl,帮助用户顺利完成安装并避免常见连带问题。

t8u9v0w1x的博客 544

JVM运行时数据区之虚拟机栈

如果采用固定大小的Java虚拟机栈,那每一个线程的Java虚拟机栈容量可以在线程创建的时候独立选定。如果Java虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那Java虚拟机将会抛出一个 OutOfMemoryError 异常。主管Java程序的运行,它保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回。栈是线程私有的,生命周期和线程一致,也就是线程结束了,该虚拟机栈也销毁了。

小小默:进无止境 1277

图像去模糊(二)——Richardson–Lucy算法

Richardson Lucy Algorithm(Richardson-Lucy算法详解及效果实例)

xueruhongchen的博客 3万+

JVM(四) —— 运行时数据区之虚拟机栈的详细介绍

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 ==在之前的章节也说过,基于栈的架构优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。== ==在JVM中,栈是运行的单位,堆是存储的单位。== 这句话的意思就是栈解决程序运行问题,即程序如何执行,或者说如何处理数据,堆解决的是数据存储的问题,即数据怎么放,放在哪。 Java虚拟机栈,早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的

壹升茉莉清的博客 1645

Python爬虫实战:模拟登录知乎 – 通过加密参数和验证码实现自动登录

通过本篇博客的讲解,我们学习了如何通过 POST请求 和 验证码识别,模拟登录知乎并爬取用户信息、问题数据。随着爬虫技术的发展,面对更复杂的反爬虫机制,我们可以不断调整策略,以绕过这些防护,实现数据的自动化抓取。

2201_76125261的博客 731

电子设计(1)二极管防电源反接电路

二极管经常用来作电源防反接保护,所需器件少,电路简单。

记得诚 1万+

JVM虚拟机栈

虚拟机栈,栈的储存单位栈帧(局部变量表,操作数栈,动态连接,方法返回地址,附加信息),栈的相关面试题。

LX1232456的博客 1338

Autosar诊断实战系列07-Dcm之0x19 06扩展数据配置及工程问题讨论

19 06扩展数据如何配置?如果某DTC没有出现过故障扩展数据该如何响应?

initiallizer的博客 1704

Java虚拟机-堆、栈、运行时数据区

Java虚拟机-堆、栈、运行时数据区 前言: 本篇文章主要讲解java(JVM)在运行期间,其运行时数据区的作用、职责与划分。包括堆内存、栈内存–虚拟机栈、本地方法栈、方法区、常量池、程序计数器等概念。 文章主要内容摘自《深入理解Java虚拟机》第三版-周志明 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。 这些区域如图所示: 1

wjy2460956668的博客 221

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JVM运行时数据区-虚拟机栈

学习JVM运行时数据区中的虚拟机栈,栈只要是用来存放栈帧,而栈帧又包括局部变量表,操作数栈,动态链接,方法返回地址等信息。

m0_62946761的博客 3650

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈

JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。 ​

Rye的博客 1588

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《剑指JVM》——第4章 虚拟机栈——运行时数据区篇

🔥本篇概览:详细讲解了JVM的运行时数据区篇的虚拟机栈的详细信息。🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 881

JVM从零到一系列:03--运行时数据区【PC寄存器,虚拟机栈】

0x01.运行时数据区概述 1.运行时数据区模型图(整体图) 2.运行时数据区模型图(详情图) 3.概述 Java虚拟机定义了若干程序运行期间会使用到的运行时数据区: 有一些会随着虚拟机的启动而创建,随着虚拟机退出而销毁。 还有一些与线程一一对应,与线程对应的数据区会随着线程的开始和结束而创建和销毁。 独立的线程:【程序计数器,栈,本地栈】 共享的线程:【堆,堆外内存,方法区】 Java虚拟机与线程: 线程是一个程序运行的单元,JVM允许一个应用有多个线程。 HotSpot中,每个线程都与

ATFWUS的博客 3万+

JAVA虚拟机——JVM 运行时数据区(数据区组成表述,程序计数器,java虚拟机栈,本地方法栈)

JVM运行时数据区

qq_53677566的博客 1137

【jvm系列-03】精通运行时数据区私有区域---虚拟机栈、程序计数器、本地方法栈

精通jvm运行时数据区私有区域

zhenghuishengq的博客 1万+

JVM运行时数据区之虚拟机栈,本地方法栈和程序计数器

JVM运行时数据区一. 运行时数据区概述二. 程序计数器三. 本地方法栈四. 虚拟机栈五. 方法区六. 堆区 一. 运行时数据区概述 ????????内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。 经典的JVM运行时数据区内存布局如下: ????????Java虚拟机定义了若千种程序运行期间会使用到的运行时数据

weixin_44991304的博客 838

JVM之运行时数据区 PC、虚拟机栈、本地方法栈

JVM之运行时数据区 PC、虚拟机栈、本地方法栈

zhouhe_的博客 1121

虚拟机运行时数据区 堆,栈,方法区(上篇)

运行时数据区内存分布(上篇) 堆和方法区下篇讲 概述 我们运行一个所谓的java程序,其实就是开启了一个虚拟机的进程,那这个虚拟机在程序运行时虚拟机里跟程序运行相关的内存结果有哪些呢。 图示 如图所示,相信平时大家也接触过内存图,但大部分都是堆,栈,方法区,其他的结构听说的相对性就会比较少。 每个线程都有自己独立的虚拟机栈,本地方法栈,程序计数器就是图上灰色的结构,但是方法区和堆是多线程共享的。就是说灰色部分每个线程一份,可以有多份,但是红色部分就每个虚拟机只有一份了。 图示 先讲这些共享的结构 pc寄

w7335123的博客 260

运行时数据区(1)——程序计数器和虚拟机栈概述

学完了类加载器,现在开始学习Java运行时数据区 运行时数据区 Java之所以能够跨平台,JVM功不可没。Java程序“一次编写到处运行”正是基于不同平台上底层JVM的不同。不同的JVM对于内存的划分方式和管理机制存在着部分差异 一个JVM就是一个进程,一个Java进程对应一个运行时数据区。运行时数据区主要包括五部分:本地方法栈、虚拟机栈、方法区、堆区、程序计数器。其中,虚拟机栈、本地方法栈和程序计数器属于线程私有,一个线程对应一份,方法区和堆区是多线程共享的。 线程 在学习Java基础部分时已经了解过线程

m0_46381657的博客 260

运行时数据区 - 虚拟机栈

① 概述 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点:跨平台,指令集小,编译器容易实现。 缺点:性能下降,实现同样的功能需要更多的指令。 是什么? Java虚拟机栈,早期也叫Java栈。每个线程再创建时都会创建一个相对应的虚拟机栈,其内部保存着一个个栈帧,对应着一次次的Java方法调用。虚拟机栈是线程私有的。 生命周期 与线程的生命周期相同。 作用 管理Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回

Pratik_shiku的博客 48万+

java虚拟机栈中,一个对象变量、方法等对应在jvm运行时数据区中的位置

目录 1、运行时数据区域 2、一个对象变量、方法等对应在jvm运行时数据区中的位置 3、思维导图链接 1、运行时数据区域 2、一个对象变量、方法等对应在jvm运行时数据区中的位置 3、思维导图链接 https://www.edrawsoft.cn/viewer/public/s/2472d553890018 ...

一点光辉的博客 829
上一篇: 运行时数据区之PC寄存器
下一篇: Mybatis
code_Floyed
博客等级 码龄7年 3粉丝 56原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值