Выделена ли память для массива в стеке или в куче в 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.
Стек содержит ссылки на объекты и значения примитивных типов для области действия текущего метода:
- Когда мы создаем примитивную локальную переменную, она создается и сохраняется в памяти стека.
- Когда мы создаем объект, он создается в памяти кучи и в памяти стека содержится ссылка на него.
Когда мы создаем массив примитивного типа, он создается в памяти кучи, и в памяти стека содержится ссылка на него.