02_stack栈

news/2024/10/31 1:31:43/

1. Stack 栈是什么?

栈也叫栈内存,主管Java程序的运行,是在线程创建时创建,它的生命期是跟随线程的生命期,线程结束栈内存也就释放,对于栈来说不存在垃圾回收问题,只要线程一结束该栈就Over,生命周期和线程一致,是线程私有的。8种基本类型的变量+对象的引用变量+实例方法都是在函数的栈内存中分配。(JDK1.5以后每个线程栈默认大小1M)

2. 栈存储什么?

栈中的数据都是以栈帧(Stack Frame)的格式存在,栈帧是一个内存区块,是一个数据集,是一个有关方法(Method)和运行期数据的数据集。

栈帧中主要保存3 类数据:

  • 本地变量(Local Variables):输入参数和输出参数以及方法内的变量。

  • 栈操作(Operand Stack):记录出栈、入栈的操作。

  • 栈帧数据(Frame Data):包括类文件、方法等等。

3. 栈运行原理?

当一个方法A被调用时就产生了一个栈帧 F1,并被压入到栈中,

A方法又调用了 B方法,于是产生栈帧 F2 也被压入栈,

B方法又调用了 C方法,于是产生栈帧 F3 也被压入栈,

……

执行完毕后,先弹出F3栈帧,再弹出F2栈帧,再弹出F1栈帧……

遵循“先进后出”或者“后进先出”原则。

图示在一个栈中有两个栈帧:

栈帧 2是最先被调用的方法,先入栈,

然后方法 2 又调用了方法1,栈帧 1处于栈顶的位置,

栈帧 2 处于栈底,执行完毕后,依次弹出栈帧 1和栈帧 2,

线程结束,栈释放。

每执行一个方法都会产生一个栈帧,保存到栈(后进先出)的**顶部,顶部栈就是当前的方法,该方法执行完毕后会自动将此栈帧出栈。

4. 常见问题?

栈溢出:Exception in thread "main" java.lang.StackOverflowError

通常出现在递归调用时。


http://www.ppmy.cn/news/88896.html

相关文章

【04】Nginx之静态资源优化配置语法

Nginx静态资源压缩实战 在Nginx的配置文件中可以通过配置gzip来对静态资源进行压缩,相关的指令可以配置在http块、server块和location块中,Nginx可以通过一下指令进行解析和处理 ngx_http_gzip_module模块 ngx_http_gzip_static_module模块 ngx_http_g…

关于 C/C++ 中的 switch 语句,您可能不知道

关于 C/C 中的 switch 语句,您可能不知道 关于如何通过VC中的逆向工程执行开关/案例的讨论 介绍 许多编程语言,如 C/C、C#、Java 和 Pascal 都提供了让我们实现选择逻辑的语句。在某些情况下,它是 的良好替代方法,使代码更清晰、…

AirPlay视频SDK集成

1定义 表1描述了本文档中使用的术语 表1:术语定义 术语定义AirPlay苹果的协议,用于通过网络将苹果设备上的内容共享给支持的配件。AirPlay可以在几种不同的模式下使用,如表2所示。支持所有模式是必需的。AirPlay 接收支持AirPlay协议的配件,可以从苹果设备上无线播放内容。例…

BigDecimal 保留2为小数 四舍五入 和舍弃

amount.divide(BigDecimal.valueOf(monthDays),2,BigDecimal.ROUND_HALF_UP);System.out.println("ROUND_HALF_UP"ROUND_HALF_UP); //6.67amount.divide(BigDecimal.valueOf(monthDays),2,BigDecimal.ROUND_DOWN); //6.66 BUG解决 FeeAmountt().divide(LoanAmount()…

c# 事件与委托

//在C#中,事件是一种特殊的委托,它允许对象通知其他对象发生了某个特定的事件。 //事件通常用于GUI应用程序中,例如当用户单击按钮时,按钮控件会引发Click事件, //然后其他对象可以订阅该事件并执行相应的操作。 //以…

android应用市场的上线流程

国内Android应用市场有很多,各有各的优势,对于开发者而言会在每个市场发布,或者在主要的市场发布后其它应用市场会抓取信息并自动上线App,这也节省开发者上线时间。App上线前首先要申请软件著作权,国内应用市场上线基本…

redis-cli 命令总结

Redis 提供了丰富的命令(command)对数据库和各种数据类型进行操作,这些 command 可以在 Linux 终端使用。在编程时,比如使用 Redis 的 Java 语言包,这些命令都有对应的方法。下面将 Redis 提供的命令做一总结。 官网命…

Node版本管理器nvm的安装与使用

前言: 多项目新旧项目管理的时候,往往与依赖不同的node版本,不同的版本对其他依赖的安装有一定的影响,因此我们需要对node的版本进行方便快捷管理和切换,如果直接卸载重装对应版本,切换项目再次卸载重装明显…