JVM--Stack栈
栈(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栈相关推荐
- java 线程栈大小配置,JVM运行时数据区详解-Stack栈(优化配置、代码样例)
最近有段时间没有更新Netty的教程了,却发了一些其他的东西.可能有的朋友会问,难道这就完事了?不会的.两方面原因.第一.笔者也是需要工作的人,自然要完成好工作中的任务,这里面也有很多东西需要学习和研 ...
- [Java]Stack栈和Heap堆的区别(终结篇)[转]
首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储: hea ...
- JVM基于栈的解释器执行原理
继上一篇字节码分析finally块对return返回值的影响,好多人对局部变量表和操作数栈之间的关系搞不清楚,下面通过图解来描述局部变量表和操作数栈直接的关系. 通过下面这段代码来解释JVM基于栈的执 ...
- JAVA Stack栈和Heap堆的区别(转)
首先分清楚Stack,Heap的中文翻译:Stack-栈,Heap-堆. 在中文里,Stack可以翻译为"堆栈",所以我直接查找了计算机术语里面堆和栈开头的词语: 堆 ...
- 如何给女朋友讲明白:Java中Stack(栈)与Heap(堆)
背景 Java中Stack(栈)与Heap(堆)是面试中被经常问到的一个话题. 有没有对Java中Stack(栈)与Heap(堆)烂熟于心的童鞋,请举手!!!(怎么没人举手-) 这个时候蜗牛哥的对象弱 ...
- java根据Stack栈实现公式解析和自定义函数(一)
我是看到了大佬的博客还能这样解析,我们来解析一下思路并扩展一下,传送门:java实现公式解析 1. Stack的介绍 栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数 ...
- 【C++ 语言】容器 ( queue 队列 | stack 栈 | priority_queue 优先级队列 | set 集合 | 容器遍历 | map )
文章目录 queue 队列 stack 栈 priority_queue 优先级队列 priority_queue 优先级队列指定排序方法 priority_queue 优先级队列排序行为 prior ...
- java集合类——Stack栈类与Queue队列
今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下: Stack继承Vector类,它通过五个操作对类 Vector 进行了扩展. 栈是 后进先出的. 栈提供了通常的 push ...
- Stack(栈 c++模版实现)
Stack(栈 c++模版实现) // // Created by XXX on 2021/7/10. //#ifndef C11LEARN_STACK_H #define C11LEARN_STAC ...
- C/C++ stack栈的理解以及使用
哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...
最新文章
- 推荐一个ASP的内容管理框架(ASP Nuke)
- python读取.edf文件
- Git提交项目到GitHub
- 2019年六月刷题列表
- 用python os.system 执行 批处理的时候, 出现的一些问题
- 基于百度AI+jquery-webcam+servlet实现人脸识别登录,兼容各主流浏览器
- 万字长文带你从零开始认识机器学习
- 24有几种封装尺寸_mmWave设备的封装应该如何处理
- R语言-误差修正模型的建立和结果解读
- 给初学Python的小伙伴一些建议
- 如何转换图片格式?建议收藏这两个方法
- 单片机中断原理及定时器详解
- 在电脑上修改apk、重新签名apk
- 微软Exchange多个高危漏洞通告
- 关于mysql的时区(下):如何设置mysql的时区
- redis之十五(游标迭代器(过滤器)——Scan)
- [PHP] B2B2C商品模块数据库设计
- 计算机专业必须知道的东西——C语言的发展
- office快速制作贺报方法
- Python调用winrar.exe进行文件压缩
热门文章
- Singularity实践教程 + Docker 转 Singularity 的避坑指南
- 洛谷P1143 进制转换
- 20款奔驰GLC260L改装ACC自适应巡航系统,缓解疲劳更轻松
- 清华计算机专业全球第一?这个最新排名是这样的
- Vue实现倒计时组件(可自定义时间倒计时功能的组件):
- Android 静态分析smail
- Controller 的方法使用String接收参数的好处
- Exception in thread “main“ java.sql.SQLException: Connections could not be acquired from the underly
- 微服务(分布式架构)
- java研发面经分享:滴滴、美团、网易、58赶集等