【问题标题】:Is memory to array allocated on stack or heap in java? [duplicate]java中的数组内存是在堆栈还是堆上分配的? [复制]
【发布时间】:2018-02-04 04:48:07
【问题描述】:

一个代码sn-p

    Scanner sc=new Scanner(System.in);
    System.out.println("enter size of array");
    int size=sc.nextInt();
    int[] arr=new int[size];//Is the array arr allocated on heap?

有没有一种叫做动态内存分配的东西?

【问题讨论】:

  • 动态内存分配给数组 Array or ArrayList ?
  • 这是堆。每当您看到 new 这个词时,就会有一些事情发生。
  • 不确定您所说的“动态”是什么意思。数组创建后无法更改其大小,但您可以在运行时随意创建新数组(并选择其大小)。
  • 并且所有的对象分配(包括数组)都使用堆。见*.com/questions/10953806/…

标签: java heap-memory dynamic-memory-allocation stack-memory


【解决方案1】:
int[] arr=new int[size];//Is the array arr allocated on heap?

请注意,没有“数组arr”。

有一个数组 - 必须在堆上,因为数组是对象,所有 Java 对象都驻留在堆上 - 并且有一个对它的引用,arr,它驻留在堆栈上,因为它是局部变量。

【讨论】:

    【解决方案2】:

    Java 对象驻留在称为堆的区域中。 新构造的对象首先被分配在一个称为 eden 的堆区域中。

    堆栈包含对当前方法范围内的对象和原始类型值的引用:

    • 当我们创建原始局部变量时,它会被创建并存储 在堆栈内存中。
    • 当我们创建一个对象时,它是在堆内存和堆栈中创建的 memory 包含它的引用。

    当我们创建一个原始类型的数组时,它是在堆内存中创建的,堆栈内存包含它的引用。

    【讨论】:

      最近更新 更多