我了解JVM为每个线程创建一个栈,该栈包含对其他方法的调用,当线程调用它们时。但我不理解当它说栈也会有局部变量和部分结果时的意思。我认为全局和局部变量(基本类型和引用)应该存在于堆中而不是栈中,请问有人可以详细说明一下吗?其次,它说部分结果,这是否意味着在线程切换发生时,这些半执行的结果(复制品)来自于局部和实例变量?
谢谢
-Abidi
谢谢
-Abidi
A reference to the Java class containing that method.
An operand stack for holding temporary values.
A "local variables" array for holding function arguments and temporary results.
这个本地变量数组的存在是为了在首次调用函数时,可以将该函数的参数存储在某个位置。本地变量数组并不实际持有在Java源代码中声明的所有局部变量;相反,它更像是一个临时缓冲区,用于保存在堆中其他位置声明的Java对象的引用,或者保存引用次数足够多的值,因为将它们放在运行时堆栈上会很慢或低效。
简而言之,您是正确的,局部变量和全局变量都存储在堆中。Java线程中的“本地变量”数组不对应于这些局部变量,而是对应于解释该方法的字节码时线程使用的临时空间。