【JVM】jvm中的栈简介

news2024/11/30 2:38:38

jvm中的栈简介

  • 一、JVM体系结构
  • 二、栈是什么?
  • 三、栈的特性
  • 四、栈帧
  • 五、栈的运行原理
    • 5.1 运行原理
    • 5.2 代码示例
      • 5.2.1 方法的入栈和出栈
      • 5.2.2 没有捕获异常
      • 5.2.3 捕获异常
  • 六、栈帧的内部结构
  • 七、运行时数据区,哪些部分存在Error和GC?
  • 八、本文源码

一、JVM体系结构

在这里插入图片描述

二、栈是什么?

我们这次讲的是JVM中的栈,栈在JVM中的位置如图所示:

在这里插入图片描述

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。【百度百科】

关于栈的动画小视频可以更好的理解栈。秒懂百科:http://baike.baidu.com/l/m2YkZz0z

上述百度百科的概念比较抽象,可能比较难以理解。下面用大白话讲一下就能很好的理解了。

栈、栈顶、栈底、入栈、出栈,这几个概念要先有个印象。

你可以把栈当作是一个没有盖子的箱子,这个箱子就是栈,箱子的底部就叫作栈底,箱子口就叫作栈顶,往箱子里放东西就是压栈(PUSH),别名进栈、入栈,从箱子中拿出东西就是出栈(POP),别名退栈,这个东西在计算机中就叫作数据。只能对顶端进行操作,数据的添加和取出分别叫作入栈和出栈。

在这里插入图片描述

栈是一种数据结构,它是先进后出,后进先出的。有个专业术语叫FILO(First In Last Out)。

通常说到栈我们还会与另外一种数据结构进行比较“队列”,队列就是先进先出,专业术语叫FIFO(First In First Out)。

网上有个更形象的说法,很容易就让人记住了这两种数据结构:“喝多了吐就是栈,吃多了拉就是队列”。哈哈,大家自行体会和理解哈。

栈有时候又叫作栈内存,它主管程序的运行,生命周期和线程同步。一旦线程结束,栈就Over了!线程结束,栈内存也就释放了,所以对于栈来说,它是不存在垃圾回收的问题的

三、栈的特性

栈是运行时的单位,而堆是存储的单位。
即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放在哪儿。

特性:

  • 访问速度快,仅次于程序计数器
  • 栈是线程私有的
  • 存在OOM,不存在GC
  • 栈存放的内容类型:8种数据类型 + 对象的引用 + 实例的方法。

即:

  1. Java虚拟机栈也是线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭)。
  2. 如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常;(当前大部分JVM都可以动态扩展,只不过JVM规范也允许固定长度的虚拟机栈)。
  3. Java虚拟机栈描述的是Java方法执行的内存模型:每个方法执行的同时会创建一个栈帧,一个方法就对应一个栈帧。对于我们来说,主要关注的stack栈内存,就是虚拟机栈中局部变量表部分。

四、栈帧

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。

在这里插入图片描述

五、栈的运行原理

5.1 运行原理

  1. JVM直接对java栈的操作只有两个,就是对栈帧的压栈和出栈,遵循“先进先出”/“后进先出”原则。
  2. 在一条活动线程中,一个时间点上,只会有一个活动的栈帧。即只有当前真正执行的方法的栈帧(栈顶栈帧)是有效的,这个栈帧被称为当前栈帧,与当前栈帧相对应的方式就是当前方法,定义这个方法的类就是当前类。
  3. 执行引擎运行的索引字节码指令只针对当前栈帧进行操作。
  4. 如果该方法中调用了其他方法,对应的新的栈帧会被创建出来,放在栈的顶端,成为新的当前帧。
  5. Java方法有两种返回函数的方式,一种是正常的函数返回,使用return指令;另外一种就是抛出异常(没有try_catch)。不管使用哪种方式,都会导致栈帧被弹出。

5.2 代码示例

5.2.1 方法的入栈和出栈

在这里插入图片描述

5.2.2 没有捕获异常

在这里插入图片描述

5.2.3 捕获异常

在这里插入图片描述

六、栈帧的内部结构

每个栈帧的内部结构都是一样的,基本上都是包含如下信息:

  1. 局部变量表(Local Variables)
  2. 操作数栈(Operand Stack)(或表达式栈)
  3. 动态连接(Dynamic Linking)(或指向运行时常量池的方法引用)
  4. 方法返回地址(Return Address)(或方法正常退出或者异常退出的定义)
  5. 一些附件信息

我们在下图中只放大一个栈帧内容看:至于每个栈帧包含的内容可以自行百度了解。
在这里插入图片描述

七、运行时数据区,哪些部分存在Error和GC?

运行时数据区是否存在Error是否存在GC是否线程私有
方法区
程序计数器
本地方法栈

在这里插入图片描述

八、本文源码

没有异常的代码:

package com.iot.back.streamserver.controller;

/**
 * <p>StackTest 此类用于:</p>
 * <p>@author:hujm</p>
 * <p>@date:2022年11月27日 22:12</p>
 * <p>@remark:</p>
 */
public class StackTest {

    public static void main(String[] args) {
        StackTest stackTest = new StackTest();
        // 执行方法A
        stackTest.methodA();
    }

    public void methodA() {
        System.out.println("方法methodA开始执行......");
        methodB();
        System.out.println("方法methodA执行结束......");
    }

    public int methodB() {
        System.out.println("方法methodB开始执行......");
        int b = 5;
        int c = methodC();
        System.out.println("方法methodB即将结束......");
        return b + c;
    }

    public int methodC() {
        System.out.println("方法methodC开始执行......");
        int c = 8;
        System.out.println("方法methodC即将结束......");
        return c;
    }
}

带有异常的代码:

package com.iot.back.streamserver.controller;

/**
 * <p>StackTest 此类用于:</p>
 * <p>@author:hujm</p>
 * <p>@date:2022年11月27日 22:12</p>
 * <p>@remark:</p>
 */
public class StackTest {
    public static void main(String[] args) {
        StackTest stackTest = new StackTest();
        // 执行方法A
        stackTest.methodA();
        System.out.println("main方法正常结束!");
    }
    public void methodA() {
        System.out.println("方法methodA开始执行......");
        methodB();
        System.out.println(1/0);
        System.out.println("方法methodA执行结束=======");
    }
    public int methodB() {
        System.out.println("方法methodB开始执行......");
        int b = 5;
        int c = methodC();
        System.out.println("方法methodB即将结束......");
        return b + c;
    }
    public int methodC() {
        System.out.println("方法methodC开始执行......");
        int c = 8;
        System.out.println("方法methodC即将结束......");
        return c;
    }
}

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

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

相关文章

boot 创建 https

需要在配置文件中&#xff1a;加入 server:ssl:key-store: classpath:https.keystorekey-store-type: JKSkey-alias: tomcatkey-password: 123456key-store-password: 123456port: 8089 这样原本请求的http&#xff0c;就需要变成https&#xff0c;其他类似 RestController p…

深度学习入门(五十六)循环神经网络——循环神经网络RNN

深度学习入门&#xff08;五十六&#xff09;循环神经网络——循环神经网络RNN前言循环神经网络——循环神经网络RNN课件潜变量自回归模型循环神经网络使用循环神经网络的语言模型困惑度&#xff08;perplexity&#xff09;梯度裁剪更多的应用RNNs总结教材1 无隐状态的神经网络…

周赛总结--LeetCode单周赛321场 AcWing79场

1. LeetCode单周赛321场 1.1 找出中枢整数 1.1.1 原题链接&#xff1a;力扣https://leetcode.cn/problems/find-the-pivot-integer/ 1.1.2 解题思路&#xff1a; 1、先保存 1-n 的和sum&#xff1b; 2、从 1 开始枚举&#xff0c;判断前 i 项和 cmp 与 sum - cmp i 是否相等…

MySQL第二弹

目录​​​​​​​ 一、数据库基本操作 1、查看数据库信息 2、查看数据库中的表信息 3、显示数据表的结构&#xff08;字段&#xff09; 4、常见的数据类型 4.1 数值类型 4.2 日期和时间类型 4.3 字符串类型 二、SQL语言概述 1、SQL语言 2、SQL分类 2.1 DDL:数据定…

【强化学习论文合集】NeurIPS-2021 强化学习论文

强化学习&#xff08;Reinforcement Learning, RL&#xff09;&#xff0c;又称再励学习、评价学习或增强学习&#xff0c;是机器学习的范式和方法论之一&#xff0c;用于描述和解决智能体&#xff08;agent&#xff09;在与环境的交互过程中通过学习策略以达成回报最大化或实现…

js——高阶函数、闭包、递归以及浅拷贝和深拷贝

目录 一、高阶函数 1、什么是高阶函数 2、把一个函数作为参数 3、return 返回的也是一个函数 二、闭包 1、闭包是什么 2、变量的作用域 3、案例 4、结果展示&#xff1a; 5、总结&#xff1a; 三、递归 1、什么是递归 2、案例一 3、分析 4、问题 5、栈溢出又是什…

【Unity Shader​】 屏幕后处理5.0:讨论双重模糊的Bloom

接上一篇基于高斯模糊的Bloom继续进行接下来的学习。 1 一些必要的思考* 1.1 关于高质量Bloom 前面提到了&#xff0c;Bloom对于游戏必不可少的效果之一&#xff0c;于是我们不仅仅要把Bloom效果实现出来&#xff0c;效果的质量好坏就更加是我们需要关注的点了。高质量泛光&a…

面试宝典之C++多态灵魂拷问

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、重载&#xff0c;隐藏/重定义&#xff0c;覆盖/重写二、多态的原理三、inline可以是虚函数吗四、静态成员函数可以是虚函数吗五、构造函…

海丝一号-中国-2020

2020年12月22日&#xff0c;由中国电科38所和天仪研究院联合研制的我国首颗商业SAR卫星“海丝一号”搭载长征八号运载火箭在文昌卫星发射中心成功发射。海丝一号历时一年完成研制&#xff0c;整星重量小于185kg&#xff0c;成像最高分辨率1m&#xff0c;可以全天时、全天候对陆…

章节5 文件与目录管理

5-Linux文件和目录管理 &#xff08;Linux操作系统-2022的前面章节都为铺垫&#xff09; 常见命令格式 Command Options Arguments 命令 选项 参数 rm -rf /* -一个字母或字母组合&#xff0c;此选项为短选项&#xff0c;–单词&#xff0c;此选项为长选项 Options选项&…

因果推断 | 双重差分法笔记补充

换了新的环境后&#xff0c;一直在适应&#xff08;其实是一直被推着走&#xff09;&#xff0c;所以停更了笔记好久啦。这一周周末终于有点得空&#xff0c;当然也是因为疫情&#xff0c;哪里都不能去&#xff0c;哈哈&#xff0c;所以来冒个泡~ 整理了最近pre的作业&#xf…

ESP32-CAM初始篇:Arduino环境搭建-->实现局域网推流

ESP32-CAM初始篇&#xff1a;Arduino环境搭建–>实现局域网推流 入手产品&#xff1a;安信可科技&#xff1a;ESP32-CAM摄像头开发板&#xff1a; 相关产品特性请访问安信可ESP32-CAM官网&#xff1a;https://docs.ai-thinker.com/esp32-cam 第一步&#xff1a;下载Ardui…

基于51单片机数字频率计的设计

目录 前 言 1 第一章 总体设计方案 2 1.1 总设计框图 2 1.2 硬件设计分析 2 1.2.1 电源的设计 2 &#xff08;4&#xff09;&#xff1a;LCD1602的指令说明及时序 10 &#xff08;5&#xff09;&#xff1a; LCD1602的RAM地址映射及标准字库表 13 第二章 软件设计与分析 15 2.1…

谷粒商城十一商城系统及整合thymeleaf渲染商城首页

我们的商城系统本应该也是前后端分离的&#xff0c;就像后台管理系统那样&#xff0c;然而出于教学考虑&#xff0c;前后端分离的话就会屏蔽掉很多细节&#xff0c;所以我们进行服务端的页面渲染式开发&#xff08;有点儿类似freemarker&#xff09; 这些页面直接粘贴到微服务…

含论文基于JSP的零食销售商城【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86500759 主要使用技术 ServletJSPcssjsMysqlTomcat 功能介绍 (1)前台功能模块&#xff1a; 注册登陆&#xff1a;顾客可以通过填写注册信息成为会员&#xff0c;登陆后才能进行购物车的管…

汽车 Automotive > SOME/IP应用学习

目录 SOME/IP介绍 SOME/IP主要功能 SOME/IP协议 SOME/IP服务类型 SOME/IP-举例 SOME/IP各模块协议 SOME/IP-基础元件 SOME/IP-SoAD SOME/IP-SD协议 SOME/IP-SD举例 SOME/IP-TP协议 SOME/IP-TP举例 SOME/IP介绍 SOME/IP ( Scalable service-Oriented Middleware ove…

基于Android的JavaEE课设

目录 1 技术栈 2 android前端 2.1 概述 2.1.1 目录结构 2.1.2 代码分层 2.2 技术点 2.2.1 数据绑定 2.2.2 前后端数据交互 2.2.3 九宫格图片 2.2.4 未处理消息提醒 2.2.5 动画效果 2.2.6 实时聊天 2.2.7 文件上传 2.2.8 底部弹窗 2.2.9 其他 3 后端 3.1 概述 …

BUUCTF Misc 假如给我三天光明 数据包中的线索 后门查杀 webshell后门

假如给我三天光明 下载文件&#xff0c;一个压缩包&#xff08;需要密码&#xff09;和图片 百度得知下面一行是盲文&#xff0c;根据盲文对照表 和上述图片对照&#xff0c;得到字符串&#xff1a;kmdonowg 。使用它解压压缩包 使用Audacity打开 转换成摩斯密码&#xff0c;…

C语言程序设计 复习总结[持续更新ing]

目录 一 初识C语言 1 main 主函数 2 注释 3 C 程序执行的过程&#xff1a; 4 C 程序的结构 5 进制的转换 1.内存容量 2.二进制与十进制的转换 1>将二进制数转换成十进制 2>将十进制转换成二进制数 3.二进制与八进制的转换 1>将八进制数转换成二进制: 2>将二进…

Java项目:JSP酒店客房管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 酒店管理系统共分为三个角色&#xff0c;客房经理、前台管理员、客户&#xff0c;各个角色的权限各不相同&#xff1b; 客房经理功能包括&#…