как jvm выделяет память при создании массива с не буквальным размером - PullRequest
0 голосов
/ 22 октября 2018

В c / c ++ необходимо указывать буквенное число размера массива при создании, то есть int arr[10];.Но в Java, мы можем создать массив в этой форме int size = 10; int[] arr = new int[size];.И компилятор не поймет, что на самом деле является размером переменной.Тогда как jvm выделяет необходимые мне массивы?

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

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

0 голосов
/ 22 октября 2018

В int arr[10]; массиве определяют размер во время компиляции, а в int size = 10; int[] arr = new int[size]; массиве определяют размер во время выполнения.Вы также можете создать динамический массив в C ++, который создается во время выполнения.

Сведения:

В c ++

int arr[10]; этот массив размещается в стеке и определяет размер массива во время компиляции

int *arr = new int[10]; этот массив размещается в куче и определяет размер массива во время выполнения.

В Java массив всегда создается с ключевым словом new, а они создаются в куче.

int[] arr = new int[size];

int[] arr - ссылка на целочисленный массив в Java, а в C ++ int *arr - указатель на целочисленный массив.Таким образом, вы также можете достичь этого в C ++.

0 голосов
/ 22 октября 2018

Java выделяет память массива в куче.Переменная arr - это просто ссылка на массив, а не сам массив.Это то же самое, что выделение массива в c / c ++ с malloc или new.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...