Таким образом, на языке, подобном C, память разделяется на 5 различных частей: ядро ОС, текстовый сегмент, статическая память, динамическая память и стек. Что-то вроде этого:
Если мы объявили статический массив в C, вам нужно было указать его размер заранее, после чего он будет исправлен навсегда. Программа выделила бы достаточно памяти для массива и ввела бы ее в сегмент статических данных, как ожидалось.
Однако я заметил, что в Java вы можете сделать что-то вроде этого:
public class Test {
static int[] a = new int[1];
public static void main( String[] args ) {
a = new int[2];
}
}
и все будет работать так, как вы ожидали. Мой вопрос в том, почему это работает на Java?
EDIT: Таким образом, консенсус в том, что int[]
в Java действует более похоже на int*
в C. Так что в качестве последующего вопроса есть ли способ выделения массивов в статической памяти на Java (если нет, почему нет)? Разве это не обеспечит более быстрый доступ к таким массивам?
EDIT2: ^ теперь в новом вопросе: Где хранятся переменные статического класса в памяти?