局部变量的Java内存(Stack)分配

Mah*_*tha 23 java

我正在学习java,现在我陷入了对象和局部变量的内存分配.任何人都可以说明或澄清我的一些疑惑吗?

  1. 我读到了对象的实例变量和局部变量的堆和堆栈内存.我有问题,天气为每种方法创建一个新的STACK?或者对于单个堆栈的每个类是由整个类使用的?
  2. 我已经读过每个线程正在创建ONE STACK是什么意思

谢谢Mahaveer

Aus*_*oke 44

每个线程都有自己的堆栈.

  • 无论何时使用new,都会在堆上创建一个对象.
  • 局部变量存储在堆栈中.这包括基元(例如int)和对创建的任何对象的引用.实际的对象本身不是在堆栈上创建的,正如我在使用时提到的那样, new 它们将在堆上创建.

我有问题,天气为每种方法创建一个新的STACK?

调用方法时使用相同的堆栈.一个方法将在堆栈上创建它自己的小部分,称为"堆栈帧",用于保存它的局部变量.

它就像一堆板,当一个方法被称为板时,板被添加到堆栈的顶部(堆栈框架),当该方法结束时,板从堆栈中移除.所有该方法的局部变量都将随之被销毁,但创建的实际对象new则不会.

JVM的垃圾收集器会破坏照顾对象(一个与创建new),当它看到你不再需要他们.


Dav*_*nan 17

  • 每个线程都有一个私有堆栈.
  • 每个方法在该线程的堆栈中都有一个私有堆栈帧.

堆栈以一对一的映射与线程相关联.堆栈绝对不与方法和类相关联.

推理所有这些的方法是方法的局部变量对于该方法的每次调用都是私有的.

  • 每次调用方法都有一个私有堆栈框架.如果该方法在两个不同的线程上运行,那么有两个不同的堆栈帧,每个调用一个. (5认同)