Day326&327.虚拟机栈 -JVM
Posted 阿昌喜欢吃黄桃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day326&327.虚拟机栈 -JVM相关的知识,希望对你有一定的参考价值。
虚拟机栈
一、虚拟机概述
1、虚拟机栈出现的背景
2、内存中的栈与堆
- 堆占用内存中比较大的区域
- 堆 管存储
- 栈 管运行
3、类比图
4、虚拟机栈基本内容
- Java虚拟机栈的存储基本单位是:
栈帧
- 一个栈帧对应一个Java方法
栈帧
是每一个线程私有
的- 一个线程对应一个Java虚拟机栈
- Java虚拟机栈的生命周期对应一个线程,线程结束了,那这个Java虚拟机栈也就结束了
- 代码演示
- 简图
栈顶所在的栈帧就是当前方法
栈存在OOM
,栈可能满了,就会报异常栈不存在GC
,因为他只存在进栈和出栈的操作
- 进栈出栈只能通过同一端实现
- 先进后出,【FILO,LIFO】first in last out、last in first out
5、栈中可能出现的异常
6、如何设置栈的大小
-Xss size #设置栈空间大小
二、栈的存储单位
1、栈中存储的内容
- 栈内部的基本单位是
栈帧
方法跟栈帧
,是一 一对应
的关系;- 一个方法的执行,就对应一个栈帧的入栈,一个方法的执行结束,对应的栈帧就会出栈
2、栈运行原理
- 图示
- 图示
3、栈帧的内部结构
- 一个栈帧对应一个方法
- 一个栈帧的入栈,对应一个新的方法调用
- 一个栈帧的出栈,对应这个方法执行的结束
- 多个线程的情况图示
每一个线程有他对应的栈,栈里面有他对应的各个栈帧,每个栈帧都有自己的结构;
所存放栈的大小取决于栈中各个栈帧的大小
三、局部变量表
1、基本概念
- 对应方法(栈帧)中的返回值,对象引用,基本类型,方法内的局部变量等
- 局部变量表与 栈帧 、方法共存亡
2、Slot理解
- Slot:槽
- 局部变量表是一个二维的数组,把每个数组元素称为
变量槽
因为当前帧没有给静态方法创建this在index为0的slot,所以无法在static静态方法里面使用this
3、Slot重复利用
变量在出了代码块后就被销毁了,那么之后被定义的b变量就直接重复再次利用
变量a之前被销毁的slot位置
4、静态变量与局部变量对比
5、调优的重要因素之一
栈中对应栈帧里面的局部变量表中的引用数据类型的引用,存在无法会直接影响,堆中实际引用数据类型实存储的数据是否被指针指向,如果没有被指针指向,那就会被GC垃圾回收
四、操作数栈
五、栈顶缓存技术
- 将栈顶元素全部缓存到物理CPU的寄存器中
六、动态链接
明天继续!!!
以上是关于Day326&327.虚拟机栈 -JVM的主要内容,如果未能解决你的问题,请参考以下文章