Java 静态与线程堆栈

标签 java memory-management static stack shared-memory

据我所知,所有静态变量和静态方法都会放在静态中,并且在方法中声明的所有方法、局部变量和引用变量都会放在堆栈中,但是静态中的局部变量和引用变量呢?方法 ?我猜它们将被分配在堆栈上,但我不确定它是如何工作的。

例如:

 public static void A(){
      int x = 3;
      Point p = new Point();
 } 

而且我猜所有线程都共享静态以及共享堆,对吗?

最佳答案

您可以将局部变量视为始终分配在执行线程的堆栈上。我猜想 JIT 编译器可以将它们优化到寄存器中,但从语义上讲,它们与堆栈分配的变量没有区别。它们的作用域和生命周期对于函数的每次调用都是私有(private)的。

您还询问静态变量(类变量)和堆。类变量在线程之间共享,因为无论哪个线程正在执行,对类变量的引用都引用相同的变量。对于驻留在堆上的对象也是如此。

关于Java 静态与线程堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691247/

相关文章:

C++ 模板类型检查编译时线程安全吗?

java - 在下一个 JOptionPane 出现之前,JOptionPane 不会消失

java - 计算 Infinispan 缓存内存大小

java - 我想在我的手机上安装一个未签名的 apk 文件。该怎么办?

Java:Bzip2 库

java - 增加 Eclipse 中的 JRE 内存使用量

python - python静态方法是否比实例方法消耗更少的内存

c - sbrk(size_t) 中的段错误

C++ 未解析的外部符号

c# - 在不同的泛型类实例之间共享静态字段