public void createArrayWithObjects() {
Integer[] arr = new Integer[Integer.MAX_VALUE];
}
Правильно я понимаю в этом случае JVM выделит память на Stack для хранения arr ссылки и Integer.MAX_VALUE ссылок?
public void createAndInitializeArrayWithObjects() {
Integer[] arr = new Integer[Integer.MAX_VALUE];
Arrays.setAll(arr, i -> new Integer(i));
}
А в этом случае JVM выделит память на Stack для хранения arr ссылки и Integer.MAX_VALUE ссылок и на Heap для Integer.MAX_VALUE значений массива?
public void createAndInitializeArrayWithPrimitivies() {
int[] arr = new int[Integer.MAX_VALUE];
}
В этом случае JVM выделит память на Stack для хранения arr ссылки и на Heap для Integer.MAX_VALUE значений массива?
Здравствуйте, Aleksei_Lekomtsev, Вы писали:
AL>Integer[] arr = new Integer[integer.max_value];
AL> Правильно я понимаю в этом случае JVM выделит память на Stack для хранения arr ссылки и Integer.MAX_VALUE ссылок?
Скорее всего да (если не учитыавть JIT). Плюс ещё объект
Integer[] на стеке. Каждая ссылка в худшем случае — 8 байт (может быть меньше благодаря CompressedOops).
AL>Integer[] arr = new Integer[integer.max_value];
AL>Arrays.setAll(arr, i -> new Integer(i));
AL> А в этом случае JVM выделит память на Stack для хранения arr ссылки и Integer.MAX_VALUE ссылок и на Heap для Integer.MAX_VALUE значений массива?
Значения — это объекты класса Integer.
AL> int[] arr = new int[Integer.MAX_VALUE];
AL> В этом случае JVM выделит память на Stack для хранения arr ссылки и на Heap для Integer.MAX_VALUE значений массива?
Да. Плюс ещё объект
int[]. Значения тут — 4 ровно байта.