栈(Stack)

栈也叫栈内存,主管java程序的运行,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题, 只要线程一结束该栈就Over,生命周期和线程一致,是线程私有的。

8中基本类型的变量+对象的引用变量+实例方法都是在函数的栈内存中分配。

栈存储的内容

栈帧中主要保存3类数据:

  • 本地变量(Local Variables):输入参数和输出参数以及方法内的变量
  • 栈操作(Operand Stack):记录出栈、入栈的操作
  • 栈帧数据(Frame Data):包括类文件、方法等等

栈运行原理

栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个数据集,是一个有关方法(Method)和运行期数据的数据集,当一个方法A被调用时就产生了一个栈帧F1,并被压入到栈中,A方法又调用了B方法,于是产生栈帧F2也被压入栈,B方法又调用了C方法,于是产生栈帧F3也被压入栈…

执行完毕后,先弹出F3栈帧,再弹出F2栈帧,再弹出F1栈帧…

遵循『先进后出』/『后进先出』原则。

每隔方法执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息, 每一个方法从调用直至执行完毕的过程,就对应着一个栈帧再虚拟机中入栈到出栈的过程。栈的大小和具体JVM的实现有关,通常在256K~756K之间,约等于1Mb左右。


栈帧2是最先被调用的方法,先入栈,然后方法2又调用了方法1,栈帧1处于栈顶的位置,栈帧2处于栈底,执行完毕后,依次弹出栈帧1和栈帧2,线程结束,栈释放。

每执行一个方法都会产生一个栈帧,保存到栈(后进先出)的顶部,顶部栈就是当前的方法,该方法执行完毕后会自动将此栈帧出栈。

递归调用方法会爆栈:

它不是异常Exception,是Error。

栈+堆+方法区的交互关系

HotSpot是使用指针的方式来访问对象:Java堆中会存放访问类元数据的地址,reference存储的就直接就是对象的地址。

JVM--Stack栈相关推荐

  1. java 线程栈大小配置,JVM运行时数据区详解-Stack栈(优化配置、代码样例)

    最近有段时间没有更新Netty的教程了,却发了一些其他的东西.可能有的朋友会问,难道这就完事了?不会的.两方面原因.第一.笔者也是需要工作的人,自然要完成好工作中的任务,这里面也有很多东西需要学习和研 ...

  2. [Java]Stack栈和Heap堆的区别(终结篇)[转]

    首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: hea ...

  3. JVM基于栈的解释器执行原理

    继上一篇字节码分析finally块对return返回值的影响,好多人对局部变量表和操作数栈之间的关系搞不清楚,下面通过图解来描述局部变量表和操作数栈直接的关系. 通过下面这段代码来解释JVM基于栈的执 ...

  4. JAVA Stack栈和Heap堆的区别(转)

          首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语:  堆 ...

  5. 如何给女朋友讲明白:Java中Stack(栈)与Heap(堆)

    背景 Java中Stack(栈)与Heap(堆)是面试中被经常问到的一个话题. 有没有对Java中Stack(栈)与Heap(堆)烂熟于心的童鞋,请举手!!!(怎么没人举手-) 这个时候蜗牛哥的对象弱 ...

  6. java根据Stack栈实现公式解析和自定义函数(一)

    我是看到了大佬的博客还能这样解析,我们来解析一下思路并扩展一下,传送门:java实现公式解析 1. Stack的介绍 栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数 ...

  7. 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )

    文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...

  8. java集合类——Stack栈类与Queue队列

    今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下: Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展. 栈是 后进先出的. 栈提供了通常的 push ...

  9. Stack(栈 c++模版实现)

    Stack(栈 c++模版实现) // // Created by XXX on 2021/7/10. //#ifndef C11LEARN_STACK_H #define C11LEARN_STAC ...

  10. C/C++ stack栈的理解以及使用

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

最新文章

  1. 推荐一个ASP的内容管理框架(ASP Nuke)
  2. python读取.edf文件
  3. Git提交项目到GitHub
  4. 2019年六月刷题列表
  5. 用python os.system 执行 批处理的时候, 出现的一些问题
  6. 基于百度AI+jquery-webcam+servlet实现人脸识别登录,兼容各主流浏览器
  7. 万字长文带你从零开始认识机器学习
  8. 24有几种封装尺寸_mmWave设备的封装应该如何处理
  9. R语言-误差修正模型的建立和结果解读
  10. 给初学Python的小伙伴一些建议
  11. 如何转换图片格式?建议收藏这两个方法
  12. 单片机中断原理及定时器详解
  13. 在电脑上修改apk、重新签名apk
  14. 微软Exchange多个高危漏洞通告
  15. 关于mysql的时区(下):如何设置mysql的时区
  16. redis之十五(游标迭代器(过滤器)——Scan)
  17. [PHP] B2B2C商品模块数据库设计
  18. 计算机专业必须知道的东西——C语言的发展
  19. office快速制作贺报方法
  20. Python调用winrar.exe进行文件压缩

热门文章

  1. Singularity实践教程 + Docker 转 Singularity 的避坑指南
  2. 洛谷P1143 进制转换
  3. 20款奔驰GLC260L改装ACC自适应巡航系统,缓解疲劳更轻松
  4. 清华计算机专业全球第一?这个最新排名是这样的
  5. Vue实现倒计时组件(可自定义时间倒计时功能的组件):
  6. Android 静态分析smail
  7. Controller 的方法使用String接收参数的好处
  8. Exception in thread “main“ java.sql.SQLException: Connections could not be acquired from the underly
  9. 微服务(分布式架构)
  10. java研发面经分享:滴滴、美团、网易、58赶集等