当前位置:首页 > 知识普及 > 正文内容

Java虚拟机栈

admin16小时前知识普及2

Java虚拟机栈

一 Java虚拟机栈概念。

Java虚拟机栈 第1张

Java虚拟机栈中存储的内容,它用于存储数据和部分过程结果的数据结构,同时也被用来处理动态链接/方法返回值和异常分派.

一个完整的栈帧包括:局部变量表/操作数栈/动态链接信息/方法正常完成和异常完成信息.

Java虚拟机栈是描述Java方法运行过程的内存模型.Java虚拟机会为每一个即将运行的Java方法创建一块叫做”栈帧”的区域,这块区域用于存储该方法在运行过程中所需要的一些信息,这些信息包括:

局部变量表(存放基本数据类型变量\引用类型的变量\类型的变量)

操作数栈

动态链接

方法出口

异常完成信息

二 局部变量表

局部变量表:(由若干个Slot组成,长度由编译器决定,单个Slot可以存储一个类型为/byte/char/short/float//的数据,两个Slot可以存储一个类型为long或者的数据)

存放编译期可知的各种基本数据类型、对象引用类型和类型(指向一条字节码指令的地址:函数返回地址)。

long、占用两个局部变量控件Slot。

局部变量表所需的内存空间在编译期确定,当进入一个方法时,方法在栈帧中所需要分配的局部变量控件是完全确定的,不可动态改变大小。

异常:线程请求的栈帧深度大于虚拟机所允许的深度—,如果虚拟机栈可以动态扩展(大部分虚拟机允许动态扩展,也可以设置固定大小的虚拟机栈),但是无法申请到足够的内存—。

局部变量表是一组变量值的存储空间,它用于存储方法,参数,以及方法内部定义的局部变量。在java编译器编译class的时候就在该方法的code属性中确定了该方法所需的最大容量,局部变量表中的变量槽也就是Slot为最小单位,java虚拟机中并没有指明一个Slot所需要占用的内存空间大小,只是非常有导向性的描述到任何一个Slot都应该能存放一个布尔型,字节型,字符型,短整型,整形,浮点型,类型以及类型的数据在这8种数据类型之中,他们的共同特征是都可以使用32位或者更小的内存空间来进行存放,但Java虚拟机这样描述Slot的空间与明确指出每个Slot应该占用32位内存还是有差别的,他这种描述允许Slot的内存空间随着处理器,操作系统或者java虚拟机的具体实现而发生变化,假如在64位的java虚拟机之中使用了64位的内存空间去实现一个Slot,java虚拟机仍然要使用对齐或者补白的手段,让Slot在外观上看出来了与32位的java虚拟机之中是一致的。

三 操作数栈

后进先出LIFO,最大深度由编译期确定。栈帧刚建立时,操作数栈为空,执行方法操作时,操作数栈用于存放JVM从局部变量表复制的常量或者变量,提供提取,及结果入栈,也用于存放调用方法需要的参数及接受方法返回的结果。

操作数栈可以存放一个jvm中定义的任意数据类型的值。

在任意时刻,操作数栈都一个固定的栈深度,基本类型除了long、占用两个深度,其它占用一个深度

四 动态连接

每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用Java虚拟机栈,持有这个引用是为了支持方法调用过程中的动态连接。Class文件的常量池中存在有大量的符号引用Java虚拟机栈,字节码中的方法调用指令就以常量池中指向方法的符号引用为参数。这些符号引用java虚拟机是什么,一部分会在类加载阶段或第一次使用的时候转化为直接引用(如final、域等),称为静态解析,另一部分将在每一次的运行期间转化为直接引用,这部分称为动态连接。

五 方法返回地址

当一个方法被执行后,有两种方式退出该方法:执行引擎遇到了任意一个方法返回的字节码指令或遇到了异常,并且该异常没有在方法体内得到处理。无论采用何种退出方式,在方法退出之后,都需要返回到方法被调用的位置,程序才能继续执行。方法返回时可能需要在栈帧中保存一些信息,用来帮助恢复它的上层方法的执行状态。一般来说,方法正常退出时,调用者的PC计数器的值就可以作为返回地址,栈帧中很可能保存了这个计数器值,而方法异常退出时,返回地址是要通过异常处理器来确定的,栈帧中一般不会保存这部分信息。

方法退出的过程实际上等同于把当前栈帧出栈,因此退出时可能执行的操作有:恢复上层方法的局部变量表和操作数栈,如果有返回值,则把它压入调用者栈帧的操作数栈中,调整PC计数器的值以指向方法调用指令后面的一条指令。

当一个方法即将被运行时,Java虚拟机首先会在Java虚拟机中为该方法创建一块”栈帧”,栈帧中包含局部变量表\操作数栈\动态链接\方法出口信息等.当方法在运行过程中需要创建局部变量时,就将局部变量的值存入栈帧的局部变量表中.

当这个方法执行完毕后,这个方法所对应的栈帧将会出栈,并释放内存空间.

经常会有人说:Java内存空间分为”栈”和”堆”,栈中存放局部变量,堆中存放对象.

上述表达并不完全正确!这里的堆可以这么理解,但是这里的栈只代表了Java虚拟机栈中的局部变量表部分.真正的Java虚拟机栈是由一个个栈帧组成,而每个栈帧中都拥有:局部变量表/操作数栈/动态链接/方法出口信息.

六 Java虚拟机栈特点

1 Java虚拟机栈是线程私有的,每个线程都有各自的Java虚拟机栈,而且随着线程的创建而创建,随便线程的消亡而消亡.

2 Java虚拟机栈会出现两种异常和

a) 如果Java虚拟机栈的内存大小不允许动态扩展,那么当线程请求栈的深度超过当前Java虚拟机栈的最大深度的时候,就会抛出异常.

b) 如果Java虚拟机栈的内存大小允许动态扩展,且当线程请求栈是内存用完了,无法再动态扩展了,此时就会抛出异常.

3 后进先出(LIFO)栈:

java虚拟机栈和程序计数器一样,他是线程私有的内存区域,他的生命周期与线程相同,java虚拟机栈描述的是java方法执行时候的内存概念模型java虚拟机是什么,每个方法在执行的时候都会创建一个栈帧,用来创建这个方法的操作数栈,局部变量表,方法出口,动态链接等信息,每一个方法在调用和结束的过程就对应了一个栈帧在虚拟机栈中入栈到出栈的过程,java虚拟机栈是一个后进先出栈,靠后执行的方法会优先完成,后面进入虚拟机栈的栈帧优先被出栈,这与我们平时执行java方法的印象是一致的java虚拟机是什么,在程序执行中java方法的调用,执行和退出,都与java虚拟机栈里面存储的栈帧有着密切的联系。

4 局部变量表的创建是在方法被执行的时候,随着栈帧的创建而创建.而且,局部变量表的大小在编译时期就可以确定下来了,在创建的时候只需要分配实现规定好的大小即可.此外,在方法运行过程中局部变量表的大小是不会发生改变的.

和区别?

表示当前线程申请的栈超过了事先定好的栈的最大深度,但是内存空间可能还有很多.而是指当前线程申请栈时发现栈已经满了,而且内存也都已经用光了.

加入微信交流群:************ ,请猛戳这里→点击入群

扫描二维码推送至手机访问。

版权声明:本文由智汇百科网发布,如需转载请注明出处。

本文链接:https://www.zhihuibkw.com/post/6105.html

分享给朋友:

“Java虚拟机栈” 的相关文章

清华北大录取率再创新低!农村学生仅占10%

清华北大录取率再创新低!农村学生仅占10%

在教育领域,清华北大这两所顶尖学府一直以来都备受瞩目。它们代表着我国高等教育的最高水平,是无数学子心中的梦想殿堂。近年来,清华北大的录取率却再创新低,而其中农村学生的占比更是仅为 10%,这一现象引发了广泛的关注和深思。清华北大作为国内顶尖的高校,其录取率的降低并非偶然。一方面,随着我国教育的普及和...

必知的急救知识:关键时刻能救命

必知的急救知识:关键时刻能救命

在生活中,我们难免会遇到各种突发状况,有时候,一些简单的急救知识可能就能在关键时刻挽救生命。因此,了解和掌握一些必知的急救知识是非常重要的。心肺复苏术(CPR)是急救中最为关键的技能之一。当遇到心脏骤停的患者时,及时进行心肺复苏可以为患者争取宝贵的时间,增加其生存的机会。心肺复苏的操作步骤包括胸外按...

英语口语发音知识:告别中式口音

英语口语发音知识:告别中式口音

在学习英语口语的道路上,很多人都面临着一个共同的挑战——中式口音。中式口音往往会给我们的英语表达带来一些障碍,影响我们与他人的沟通和交流效果。那么,如何告别中式口音,真正掌握地道的英语口语发音呢?下面就让我们一起来探讨一些有效的方法和技巧。要重视语音基础的训练。这就好比建造一座高楼大厦,坚实的地基是...

宠物饲养知识:做合格的铲屎官

宠物饲养知识:做合格的铲屎官

在如今的生活中,越来越多的人选择养宠物作为自己的伴侣,它们给我们带来了无尽的欢乐和温暖。养宠物不仅仅是给予它们食物和住所,更重要的是要成为一名合格的“铲屎官”,负责照顾它们的生活起居,保障它们的健康和幸福。了解宠物的基本需求是做合格铲屎官的第一步。不同的宠物有不同的习性和需求,比如猫和狗。猫是独立的...

学习简单的急救包扎方法

学习简单的急救包扎方法

在生活中,意外和突发状况时有发生,掌握一些简单的急救包扎方法能够在关键时刻挽救生命、减轻伤痛。以下是关于学习简单急救包扎方法的详细介绍。一、绷带包扎法绷带是急救包扎中最常用的工具之一,它可以固定敷料、止血、减轻肿胀等。1. 环形包扎法这是最基本的绷带包扎法,适用于肢体粗细均匀的部位,如手腕、小腿等。...

常见花卉的花语

常见花卉的花语

花卉,作为大自然赋予我们的美丽礼物,不仅以其绚烂的色彩和迷人的姿态装点着世界,还蕴含着丰富的情感与寓意,这便是花语的由来。每一种常见的花卉都仿佛是一位默默诉说的使者,通过独特的花语,传递着人们内心深处的情感和思想。玫瑰,无疑是花卉世界中最具代表性的存在之一,它的花语饱含着爱情、美丽与热情。红玫瑰象征...