内存是否在java中的堆栈或堆上分配?

时间:2017-08-26 07:49:23

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

代码段

    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?

是否有一些称为数组的动态内存分配?

2 个答案:

答案 0 :(得分:1)

int[] arr=new int[size];//Is the array arr allocated on heap?

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

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

答案 1 :(得分:0)

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

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

  • 当我们创建原始局部变量时,它会被创建和存储 在堆栈内存中。
  • 当我们创建一个Object时,它是在堆内存和堆栈中创建的 内存包含它的参考。

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