Day326&327.虚拟机栈 -JVM

Posted 阿昌喜欢吃黄桃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day326&327.虚拟机栈 -JVM相关的知识,希望对你有一定的参考价值。

虚拟机栈

一、虚拟机概述

1、虚拟机栈出现的背景

在这里插入图片描述


2、内存中的栈与堆

image-20210712205644307

  • 堆占用内存中比较大的区域
  • 堆 管存储
  • 栈 管运行

3、类比图

image-20210712210351466


4、虚拟机栈基本内容

image-20210712213229308

  • Java虚拟机栈的存储基本单位是: 栈帧
  • 一个栈帧对应一个Java方法
  • 栈帧是每一个线程私有
  • 一个线程对应一个Java虚拟机栈
  • Java虚拟机栈的生命周期对应一个线程,线程结束了,那这个Java虚拟机栈也就结束了

  • 代码演示

在这里插入图片描述

  • 简图

栈顶所在的栈帧就是当前方法

image-20210712213419273

  • 栈存在OOM,栈可能满了,就会报异常
  • 栈不存在GC,因为他只存在进栈和出栈的操作

image-20210712213941305

  • 进栈出栈只能通过同一端实现
  • 先进后出,【FILO,LIFO】first in last out、last in first out

5、栈中可能出现的异常

image-20210712214259682

6、如何设置栈的大小

-Xss size #设置栈空间大小

image-20210712214733392

二、栈的存储单位

1、栈中存储的内容

  • 栈内部的基本单位是栈帧
  • 方法跟栈帧,是一 一对应的关系;
  • 一个方法的执行,就对应一个栈帧的入栈,一个方法的执行结束,对应的栈帧就会出栈

image-20210712215233371

2、栈运行原理

image-20210712220947029

  • 图示

image-20210712220743601


image-20210712221734054

  • 图示

image-20210712222204413


3、栈帧的内部结构

  • 一个栈帧对应一个方法
  • 一个栈帧的入栈,对应一个新的方法调用
  • 一个栈帧的出栈,对应这个方法执行的结束

image-20210712223348230

  • 多个线程的情况图示

每一个线程有他对应的栈,栈里面有他对应的各个栈帧,每个栈帧都有自己的结构;

所存放栈的大小取决于栈中各个栈帧的大小

image-20210712222951538

三、局部变量表

1、基本概念

  • 对应方法(栈帧)中的返回值,对象引用,基本类型,方法内的局部变量等

image-20210713202024552

  • 局部变量表与 栈帧 、方法共存亡

image-20210713203115540


2、Slot理解

  • Slot
  • 局部变量表是一个二维的数组,把每个数组元素称为变量槽

image-20210713205204943

image-20210713210915056

因为当前帧没有给静态方法创建this在index为0的slot,所以无法在static静态方法里面使用this


3、Slot重复利用

image-20210713211217152

变量在出了代码块后就被销毁了,那么之后被定义的b变量就直接重复再次利用变量a之前被销毁的slot位置


4、静态变量与局部变量对比

image-20210713212032054


5、调优的重要因素之一

image-20210713213342915

栈中对应栈帧里面的局部变量表中的引用数据类型的引用,存在无法会直接影响,堆中实际引用数据类型实存储的数据是否被指针指向,如果没有被指针指向,那就会被GC垃圾回收

四、操作数栈

image-20210713214022676

image-20210713214201153

image-20210713214536000

image-20210713213443151

五、栈顶缓存技术

  • 将栈顶元素全部缓存到物理CPU的寄存器中

image-20210713220759940

六、动态链接

明天继续!!!

以上是关于Day326&327.虚拟机栈 -JVM的主要内容,如果未能解决你的问题,请参考以下文章

面试还在死记硬背?图解才是永远滴神——图解虚拟机栈和栈帧

面试还在死记硬背?图解才是永远滴神——图解虚拟机栈和栈帧

面试还在死记硬背?图解才是永远滴神——图解虚拟机栈和栈帧

面试还在死记硬背?图解才是永远滴神——图解虚拟机栈和栈帧

面试还在死记硬背?图解才是永远滴神——图解虚拟机栈和栈帧

细说虚拟机栈