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

时间:2011-11-09 07:22:05

标签: java

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

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

3 个答案:

答案 0 :(得分:42)

每个帖子都有自己的堆栈

  • 每当您使用new时,都会在上创建对象
  • 局部变量存储在堆栈中。这包括原语(例如int)和引用到创建的任何对象。 实际对象本身不是在堆栈上创建的,正如我在使用 new 时提到的那样,它们将在堆上创建。
  

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

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

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

当JVM的垃圾收集器看到你不再需要它时,它会照看上的对象(用new创建的那个)。< / p>

答案 1 :(得分:16)

  • 每个线程都有一个私有堆栈。
  • 每个方法在该线程的堆栈中都有一个私有的堆栈框架

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

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

答案 2 :(得分:0)

当然,java垃圾收集器总是处理Heap,当它有机会被执行时,所以它只查找孤立对象并将它们擦掉,这就是为什么java中的NEW关键字总是在堆内存上创建新对象的原因。