我在读什么,堆栈和堆在哪里?.我有点模糊的一件事是在方法退出后堆栈会发生什么.以此图片为例:

退出方法后清除堆栈,但这意味着什么?堆栈上的指针是否刚刚移回堆栈的开头使其变空?我希望这不是一个太宽泛的问题.当从退出方法中清除堆栈时,我不确定幕后发生了什么.
当调用方法时,局部变量位于堆栈上。对象引用也存储在堆栈中,相应的对象存储在堆中。
堆栈只是内存的一个区域,它有起始地址和结束地址。JVM(java虚拟机)有一个寄存器,它指向当前堆栈的顶部(堆栈指针)。如果调用新方法,则会向寄存器添加偏移量以在堆栈上获取新空间。
当方法调用结束时,堆栈指针将减少此偏移量,从而释放分配的空间。
局部变量和其他内容(如返回地址、参数...)可能仍在堆栈上,并将被下一个方法调用覆盖。
顺便说一句:这就是 java 将所有对象存储在堆中的原因。当一个对象位于堆栈上并且您将返回指向堆栈的引用时,该对象可能会被下一个方法调用销毁。
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |