据我所知,所有静态变量和静态方法都会放在静态中,并且在方法中声明的所有方法、局部变量和引用变量都会放在堆栈中,但是静态中的局部变量和引用变量呢?方法 ?我猜它们将被分配在堆栈上,但我不确定它是如何工作的。
例如:
public static void A(){
int x = 3;
Point p = new Point();
}
而且我猜所有线程都共享静态以及共享堆,对吗?
最佳答案
您可以将局部变量视为始终分配在执行线程的堆栈上。我猜想 JIT 编译器可以将它们优化到寄存器中,但从语义上讲,它们与堆栈分配的变量没有区别。它们的作用域和生命周期对于函数的每次调用都是私有(private)的。
您还询问静态变量(类变量)和堆。类变量在线程之间共享,因为无论哪个线程正在执行,对类变量的引用都引用相同的变量。对于驻留在堆上的对象也是如此。
关于Java 静态与线程堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691247/