【发布时间】:2015-07-10 07:05:03
【问题描述】:
我正在阅读What and where are the stack and heap?。我有点模糊的一件事是方法退出后堆栈会发生什么。以这张图片为例:
退出方法时堆栈被清除,但这意味着什么?堆栈上的指针是否刚刚移回堆栈的开头使其为空?我希望这不是一个太宽泛的问题。当堆栈从退出方法中清除时,我不确定幕后发生了什么。
【问题讨论】:
-
当方法结束时,为该方法保留的堆栈内存块变为空,因为不再需要(函数结束)并且堆栈指针跳回前一个堆栈块(以便继续你之前处理的函数)。
-
查看这篇关于 How the Java virtual machine handles method invocation and return 的 17 岁文章。它深入解释了方法调用和返回时发生的情况。 JVM 基础知识在整个时间里不应该发生太大变化。如果有时间,您可以与上述链接的规范进行交叉检查...
-
这取决于JVM如何实现它。您可以谈论它在概念上是如何完成的,但它是如何真正完成的,可能会在 JVM 和 JVM 版本之间发生变化。 (例如,从概念上讲,所有对象都在堆上分配。但实际上,如果一个对象从未在方法之外被引用,HotSpot JIT 编译器可以决定将其分配在堆栈上;但是在您的代码中,您永远不会注意到区别)