[英]What happens after a method is called in Java
这看起来像一个愚蠢的问题,但我发现它很难做到正确。 我问过不同的人,但无法得到理想的答案。
我想知道在Java中调用普通方法后会发生什么(在单线程环境中提供)。
我的理解是:
这是一个非常不完整的,可能是错误的答案。 有人可以提供更详细的描述吗?
非常感谢。
不,这实际上相当准确:
1)当前堆栈变量保留在堆栈中
2)当前方法暂停
3)新调用方法的参数被推送到堆栈
4)方法代码运行
5)方法运行完毕后,我们弹出堆栈。 被调用方法的堆栈变量不再有效 - 此时它们不再“存在”。
6)我们将返回值(如果有的话)传递给调用者
7)代码继续调用方法。 它的所有堆栈变量都保持不变。
==============================
附录:
@Kevin -
从概念上讲,我认为你做得恰到好处。 我澄清了几点,希望有所帮助。
如果你想深入了解JVM如何实现“方法调用”,David Wallace的链接非常好。
这里有一个关于“堆栈”如何工作的很好的概述。 任何堆栈,调用任何子程序 - 不只是Java: http : //en.wikipedia.org/wiki/Call_stack
最后,Marko Topolnik是正确的。 “现实”几乎总是很复杂,它不适合简单,一刀切的答案。 但我绝对认为你的理解是好的。 至少在10000英尺的高度。
恕我直言...
对于解释器,假设一个实例方法,并采取一些小的自由:
返回时,堆栈会弹出到调用开始的位置,任何返回值都会被压入堆栈,控制权将转移回调用者。
编译代码在概念上类似,只使用“C”堆栈,JITC环境中的解释代码将同时使用JVM堆栈和“C”堆栈。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.