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

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

备战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

目录
相关文章
|
2月前
|
存储 Java 数据安全/隐私保护
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
39 0
|
5月前
|
存储 Java 编译器
【面试知识】Java内存分配之常量池、堆、栈
【面试知识】Java内存分配之常量池、堆、栈
|
6月前
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
4月前
|
存储 安全 Java
【数据结构】栈的使用|模拟实现|应用|栈与虚拟机栈和栈帧的区别
【数据结构】栈的使用|模拟实现|应用|栈与虚拟机栈和栈帧的区别
30 0
|
7月前
【栈和队列面试题】用栈实现队列(动图解析更清晰)
【栈和队列面试题】用栈实现队列(动图解析更清晰)
|
5月前
|
算法 容器
【算法训练营】队列合集(2) 2073. 买票需要的时间 || 面试题 03.04. 化栈为队 ||
【算法训练营】队列合集(2) 2073. 买票需要的时间 || 面试题 03.04. 化栈为队 ||
63 0
|
4天前
|
存储 监控 安全
JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。
11 0
|
3月前
|
存储 算法 调度
【数据结构入门精讲 | 第五篇】栈知识点及考研408、企业面试练习
【数据结构入门精讲 | 第五篇】栈知识点及考研408、企业面试练习
38 0
|
4月前
|
设计模式 消息中间件 Java
面试官:什么是JIT、逃逸分析、锁消除、栈上分配和标量替换?
面试官:什么是JIT、逃逸分析、锁消除、栈上分配和标量替换?
554 1
|
4月前
|
存储 程序员 C++
面试题:C++堆和栈的区别?
面试题:C++堆和栈的区别?
25 0