Как статические массивы хранятся в памяти Java?

Итак, в таком языке, как C, память разделена на 5 различных частей: ядро ​​ОС, текстовый сегмент, статическая память, динамическая память и стек. Примерно так:

Memory Layout

Если мы объявили статический массив в C, вам нужно было заранее указать его размер, после чего он будет исправлен навсегда. Программа выделит достаточно памяти для массива и вставит ее в сегмент статических данных, как и ожидалось.

Однако я заметил, что в Java вы можете сделать что-то вроде этого:

public class Test {
        static int[] a = new int[1];

        public static void main( String[] args ) {
                a = new int[2];
        }
} 

и все будет работать так, как вы ожидаете. Мой вопрос: почему это работает на Java?

РЕДАКТИРОВАТЬ: Итак, консенсус состоит в том, что int [] в Java действует более аналогично int * в C. Итак, следующий вопрос: есть ли способ выделить массивы в статической памяти в Java (если нет, то почему)? Разве это не обеспечило бы более быстрый доступ к таким массивам? EDIT2: ^ теперь в новом вопросе: Где статические переменные класса хранятся в памяти?

19
задан Community 23 May 2017 в 12:01
поделиться