gpt4 book ai didi

java - 退出方法时堆栈会发生什么?

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:49 25 4
gpt4 key购买 nike

我正在阅读 What and where are the stack and heap? .我有点模糊的一件事是方法退出后堆栈会发生什么。以这张图片为例:

Stack

退出方法时堆栈被清除,但这是什么意思?堆栈上的指针是否刚刚移回堆栈的开头使其为空?我希望这不是一个太宽泛的问题。当堆栈从退出方法中清除时,我不太确定幕后发生了什么。

最佳答案

调用方法时,局部变量位于堆栈中。对象引用也存储在栈中,对应的对象存储在堆中。

堆栈只是一 block 内存区域,它有起始地址和结束地址。JVM(java 虚拟机)有一个指向当前栈顶(栈指针)的寄存器。如果调用了一个新的方法,一个偏移量将被添加到寄存器中以在堆栈上获得新的空间。

当一个方法调用结束时,堆栈指针将减少这个偏移量,从而释放分配的空间。

局部变量和其他东西(如返回地址、参数...)可能仍在堆栈中,并将被下一个方法调用覆盖。

顺便说一句:这就是 java 将所有对象存储在堆中的原因。当一个对象位于堆栈上,并且您将返回指向堆栈的引用时,该对象可能会被下一个方法调用销毁。

关于java - 退出方法时堆栈会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com