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

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

备战2022春招或暑期实习,祝大家每天进步亿点点!Java并发编程Day6

本篇总结的是 如何在Java中避免创建不必要的对象,后续会每日更新~

关于《我们一起学Redis》、《我们一起学HarmonyOS》等知识点可以查看我的往期博客

相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!

image.png目录

1、虚拟机栈与栈帧

2、什么是栈帧

3、IDEA中如何DEBUG栈帧

4、图解方法调用时栈帧变化


1、虚拟机栈与栈帧

Java的JVM划分为堆、栈、方法区等模块,这里的栈指的就是虚拟机栈;那什么是栈帧?虚拟机栈和栈帧又有什么关系呢?先来看一段代码:image.pngimage.pngimage.pngimage.pngimage.png有了这些铺垫,后面的内容才会思路清晰,就可以很好的解释什么是栈帧?虚拟机栈和栈帧又有什么关系呢?


2、什么是栈帧

虚拟机为什么会划分一块虚拟机栈内存呢?其实虚拟机栈的内存空间是给线程使用的,每个线程启动后,虚拟机为其分配一块栈内存空间;每个线程分配的虚拟机栈内存区域由多个栈帧(Frame)组成,栈帧对应着每个方法调用时所占用的内存(线程运行时,其实就是执行我们编写的源代码编译后的字节码嘛、说到底就是一个个的方法调用);每个栈帧的由局部变量表、操作数栈、动态链接、方法返回值地址等组成。


虚拟机栈与栈帧的关系如下:image.pngStackOverflowError异常原因如下:

每个线程分配的栈内存空间就好比一根用来串珠子的绳子,绳子的长度是固定的,并且只能从穿入的那一端出入,珠子就好比线程运行过程中需要执行的方法,珠子有大有小,就好比方法因为其局部变量等原因,内存大小不一。每当调用一个方法,就需要穿入一颗珠子,方法执行完毕,珠子就会取出来。而上述例子发生StackOverflowError异常的原因,就是方法一直在循环调用没有返回,导致线程的分配的栈内存达到上限抛出了StackOverflowError异常。

image.png

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png图解方法调用时栈帧的变化,涉及到JVM层面的知识点,其中包括方法区、堆、虚拟机栈、栈帧、程序计数器,其大致作用如下所示:


方法区

方法区是虚拟机中一块线程共享的内存区域,用于存储类信息、常量池、静态变量、编译后的字节码等信息。在我们这个例子中,JVM层面执行的是字节码指令,而这些指令就是存储在方法区中。image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png


image.png

目录
相关文章
|
3月前
|
Java
程序计数器和虚拟机栈
这篇文章介绍了Java虚拟机(JVM)的内存结构,特别解释了程序计数器(Program Counter Register)的作用,即用来记录下一条JVM指令的执行地址和行号。
程序计数器和虚拟机栈
|
3天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
13 2
|
3月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
3月前
|
存储 设计模式 Java
Unity精华☀️ 面试“堆、栈”误区!这样做可能反而会降低吸引力
Unity精华☀️ 面试“堆、栈”误区!这样做可能反而会降低吸引力
|
4月前
|
云计算
云计算问题之线程请求的栈深度大于虚拟机所允许的深度如何解决
云计算问题之线程请求的栈深度大于虚拟机所允许的深度如何解决
31 1
|
3月前
|
安全 Java
虚拟机栈的五道面试题
这篇文章提供了关于Java虚拟机栈的五个面试问题,涉及栈溢出的情况、栈大小调整、栈内存的分配、垃圾回收与虚拟机栈的关系以及局部变量的线程安全性。
|
4月前
|
存储 安全 Java
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
87 3
|
4月前
|
存储 缓存 监控
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
49 3
|
4月前
|
存储 Java 对象存储
Java虚拟机(JVM)中的栈(Stack)和堆(Heap)
在Java虚拟机(JVM)中,栈(Stack)和堆(Heap)是存储数据的两个关键区域。它们在内存管理中扮演着非常重要的角色,但各自的用途和特点有所不同。
52 0
|
4月前
|
存储 设计模式 监控
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
47 0