2
int x;
int y=10;

在 Java 中分配什么类型的内存?我听说Java中的所有内容都分配了动态内存。int这对于对象来说是正确的,但是对于原始数据类型(如、float等)是否也遵循相同的规则?

4

6 回答 6

6

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

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

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

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

  public void method(){
     int b = 4; ----> Will be allocated in stack
  }
}
于 2013-10-14T13:57:38.713 回答
3

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

于 2013-10-14T13:57:50.150 回答
1
  1. JVM 堆栈存储局部变量。
  2. 所有类实例和数组都分配在 JVM 堆上。
  3. 方法区域存储每个类结构
  4. 运行时常量池存储常量
于 2013-10-14T14:08:38.083 回答
0

这是我读过的关于 Java 内存的最佳文章https://blog.codecentric.de/en/2010/01/the-java-memory-architecture-1-act/ - 你应该看看它是如何管理的。还有关于此主题的另一篇文章原始变量和参考变量的内存分配

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

于 2013-10-14T14:03:41.090 回答
0

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

阅读更多:http: //javarevisited.blogspot.com/2013/01/difference-between-stack-and-heap-java.html#ixzz2hhlHV13c

于 2013-10-14T14:01:16.553 回答
0

堆栈是为原语分配内存的地方,也是存储局部变量的地方;引用也在堆栈上传递。

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

于 2013-10-14T14:02:05.143 回答