Java: где статические поля живут в памяти?

Если мы храним объекты в статических полях объекта, как JVM выделяет память для него? Это живет в "неявном" (не уверенный, если я использую правильное слово), объект класса? Как статические поля отличаются от полей объекта?

17
задан Midnight Blue 26 January 2010 в 19:58
поделиться

4 ответа

Статические поля являются переменными класса, и передаются среди всех экземпляров этого класса. Переменные экземпляра (или поля объектов, как я думаю, вы относитесь к ним как) принадлежат к отдельным случаям класса и не передаются.

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

14
ответ дан 30 November 2019 в 13:34
поделиться

Статические поля являются частью класса; Предположительно, они исчезают, когда класс не загружен. Имеет смысл представить их как где-то рядом с экземпляром класса для класса. Подробности о том, как проложено память, выходит за пределы досягаемости приложения Java; В качестве следствия спецификация JVM не соответствует ничего особенным на эту тему. Даже «исчезновение» полей, когда класс не загружен, не может наблюдаться непосредственно, но только через действие GC, предполагая, что у хорошо размещенного доработка () .

1
ответ дан 30 November 2019 в 13:34
поделиться

Как сказал никларенн, я не думаю, что есть какие-либо спецификации JVM, как именно статические поля хранятся. Компилированные определенные константы (статические окончательные) заменит наиболее вероятность выражения во время компиляции. Для переменных статических полей будет только два варианта: куча или (если существуют) сегмент данных JVM.

0
ответ дан 30 November 2019 в 13:34
поделиться

Как говорит ответ Ника, нет конкретного «физического» места, предусмотренного спецификацией языка, но с точки зрения логической ментальной модели, о которой вы можете рассуждать, это может помочь вам подумать о статических полях, которые прикреплены к Класс объекта ( Foo.class ) класса эти поля принадлежат.

Кроме того, объект класса используется другими способами (что - , предусмотренные языком SPEC) при работе со статическими объектами: например, при вызове синхронизированных Способ, замок удерживается на объекте класса класса, к которому принадлежит метод метода.

7
ответ дан 30 November 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: