Java JVM堆栈变量

Java JVM堆栈变量,java,jvm,stack,Java,Jvm,Stack,我知道JVM为每个线程创建了一个堆栈,该堆栈在线程调用其他方法时包含对它们的调用。我不明白它什么时候说堆栈也会有局部变量和部分结果。我认为全局和局部变量(原语和引用)将存在于堆中而不是堆栈中,有人能详细说明它的含义吗?其次,它说的是部分结果,这是否意味着当线程切换发生时,来自本地变量和实例变量的那些半执行结果(副本)会发生呢 谢谢 -每个JVM都有一个方法调用帧的运行时堆栈。每个方法框架包含 A reference to the Java class containing that method

我知道JVM为每个线程创建了一个堆栈,该堆栈在线程调用其他方法时包含对它们的调用。我不明白它什么时候说堆栈也会有局部变量和部分结果。我认为全局和局部变量(原语和引用)将存在于堆中而不是堆栈中,有人能详细说明它的含义吗?其次,它说的是部分结果,这是否意味着当线程切换发生时,来自本地变量和实例变量的那些半执行结果(副本)会发生呢

谢谢


-每个JVM都有一个方法调用帧的运行时堆栈。每个方法框架包含

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对象的引用,或者保存引用次数足够多的值,以便将它们放在运行时堆栈上会很慢或效率低下


简而言之,本地和全局存储在堆中是正确的。Java线程中的“局部变量”数组不对应于这些局部变量,而是在解释方法的字节码时,线程使用的临时空间。

每个JVM都有一个方法调用帧的运行时堆栈。每个方法框架包含

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线程中的“局部变量”数组并不对应于这些局部变量,而是在解释方法字节码时线程使用的临时空间。

+1,但我将“全局变量存储”替换为“全局变量引用存储”由于堆栈只包含引用或基元值,为什么不选择正确的答案?