Где в JVM хранится статическое поле класса?

«Где в JVM хранится статическое поле класса?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статическое поле (static field) хранится в области памяти для метаданных классаMetaspace (или Method Area/PermGen в более старых версиях JVM).

Основные характеристики:

  • Единственный экземпляр: Существует в одном экземпляре для всего класса, независимо от количества созданных объектов.
  • Время жизни: Инициализируется при загрузке класса JVM и существует до его выгрузки.
  • Доступ: Доступно через имя класса (ClassName.staticField).

Пример:

public class Counter {
    static int count = 0; // Хранится в Metaspace
    int id; // Нестатическое поле хранится в куче с каждым объектом
}