Выделена ли память для массива в стеке или в куче в Java?

Фрагмент кода

    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 ответа

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

Обратите внимание, что нет "массива arr".

Существует массив - который обязательно находится в куче, потому что массивы являются объектами, а все объекты Java находятся в куче - и есть ссылка на это, arr, который находится в стеке, потому что это локальная переменная.

Объекты Java находятся в области, называемой кучей. Вновь созданные объекты сначала размещаются в области кучи, называемой eden.

Стек содержит ссылки на объекты и значения примитивных типов для области действия текущего метода:

  • Когда мы создаем примитивную локальную переменную, она создается и сохраняется в памяти стека.
  • Когда мы создаем объект, он создается в памяти кучи и в памяти стека содержится ссылка на него.

Когда мы создаем массив примитивного типа, он создается в памяти кучи, и в памяти стека содержится ссылка на него.

Другие вопросы по тегам