Java中的静态和动态内存

时间:2013-10-14 13:54:46

标签: java memory allocation

int x;
int y=10;

在Java中分配了哪种类型的内存?我听说Java中的所有内容都分配了动态内存。对于对象来说也是如此,但原始数据类型也遵循相同的规则(如intfloat等)?

6 个答案:

答案 0 :(得分:6)

在一行中,它取决于声明变量的位置。

局部变量(在方法中声明的变量)存储在堆栈中,而实例和静态变量存储在。* < / p>

注意: 变量的类型无关紧要。

class A{
  private int a = 10;  ---> Will be allocated in heap

  public void method(){
     int b = 4; ----> Will be allocated in stack
  }
}

答案 1 :(得分:3)

原始变量和函数调用存储在堆栈中。 对象存储在堆中。

答案 2 :(得分:1)

  1. JVM堆栈存储局部变量。
  2. 所有类实例和数组都在JVM堆上分配。
  3. “方法”区域按类结构存储
  4. 运行时常量池存储常量

答案 3 :(得分:0)

堆和堆栈之间的主要区别在于堆栈内存用于存储局部变量和函数调用,而堆内存用于在Java中存储对象。无论如何,在代码中创建对象,例如作为成员变量,局部变量或类变量,它们总是在Java中的堆空间内创建。

了解详情:http://javarevisited.blogspot.com/2013/01/difference-between-stack-and-heap-java.html#ixzz2hhlHV13c

答案 4 :(得分:0)

堆栈是将内存分配给基元的位置,以及存储局部变量的位置。引用也在堆栈中传递。

堆是为对象分配内存的地方,而对象又被称为堆内存。静态变量与实例变量一起存储在堆上。

答案 5 :(得分:0)

这是我读过的关于java内存https://blog.codecentric.de/en/2010/01/the-java-memory-architecture-1-act/的最好的文章 - 你应该看看它是如何管理的。此外,还有另一篇关于此主题的帖子Memory allocation for primitive and reference variables

并且,作为您的问题的答案:局部变量存储在堆栈中,而实例和静态变量存储在堆上。