2015-06-27 4 views
2

Я хочу знать, где статические переменные хранятся в Java.
Есть уже несколько вопросов по SO, как: where is a static method and a static variable stored in java. In heap or in stack memoryГде хранятся статические переменные в java?

по ссылке говорится, что статические переменные хранятся в куче.

Но следующая собственная выдержка из книги Билла Veners («Внутри виртуальной машины Java»):

Метода Область
Внутри экземпляра виртуальной машины Java, информация о загруженных типах хранятся в логической области памяти , называемой областью метода. Когда виртуальная машина Java загружает тип, он использует загрузчик классов для , чтобы найти соответствующий файл класса. Класс загрузчик читает в файле класса - линейный поток двоичных данных - и передает его на виртуальную машину. Виртуальная машина извлекает информацию о типе из двоичных данных и сохраняет информацию в области метода. Память для классных (статических) переменных, объявленных в , класс также берется из области метода.

В нем четко указано, что при загрузке класса статические переменные сохраняются в области метода. Насколько я знаю, область метода отличается от кучи. Таким образом, книга противоречит предоставленной SO-ссылке.

Может кто-то прояснить путаницу?

+1

[Область метод является логически частью кучи.] (Https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html # jvms-2.5.4) – EJP

+0

Спасибо Siguza за форматирование. Кстати, как получить индивидуальный идентификатор? – Mandroid

+0

@EJP Это должен быть ответ. – Siguza

ответ

0

От JVM Documentaion:

Метод Область

Виртуальная машина Java имеет область метода, который является общей среди всех потоков виртуальной машины Java. Область метода аналогична области хранения для скомпилированного кода обычного языка или аналогична сегменту «текст» в процессе операционной системы. Он хранит структуры каждого класса, такие как пул постоянной времени выполнения, данные полей и методов, а также код методов и конструкторов, включая специальные методы (§2.9), используемые при инициализации класса и экземпляра и инициализации интерфейса.

Область метода создается при запуске виртуальной машины. Хотя область метода логически является частью кучи, простые реализации могут выбирать не собирать и не собирать мусор. В этой версии спецификации виртуальной машины Java не указано расположение области метода или политики, используемые для управления скомпилированным кодом.

1

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

Эта область метода создается при запуске виртуальной машины. Хотя область метода логически является частью кучи, простые реализации могут выбирать не собирать и не собирать мусор.

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.4

+0

Где говорится, что статические переменные находятся в области метода? – EJP

+0

Это нигде я не могу найти за пределами цитаты из книги Билла Веннерса. В основном я пытался прояснить двусмысленность в области методов и кучи, которая была темой вопроса. Теперь мне очень любопытно найти это в JVM Spec. –

+0

Я сомневаюсь, что вы это сделаете. Суть области метода заключается в том, что она содержит материалы только для чтения, такие как текстовый сегмент. – EJP

Смежные вопросы