【问题标题】:Static and Dynamic memory in JavaJava中的静态和动态内存
【发布时间】:2013-10-22 02:47:17
【问题描述】:
int x;
int y=10;

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

【问题讨论】:

  • 我更习惯于“堆栈”和“堆”的术语
  • 一旦你得到你正在寻找的答案,你必须选择你认为最好的答案。

标签: java memory allocation


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这澄清了我的疑问......很好
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

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

          【讨论】:

            猜你喜欢
            • 2011-01-20
            • 2014-10-12
            • 1970-01-01
            • 2014-10-03
            • 2016-02-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-27
            相关资源
            最近更新 更多