Ответ
Статические поля (переменные класса) хранятся в метапространстве (Metaspace), начиная с Java 8. До Java 8 они размещались в Permanent Generation (PermGen).
Пример:
class MyClass {
// Статическая переменная хранится в Metaspace.
static int instanceCount = 0;
}
Особенности и почему Metaspace:
- Время жизни: Существуют на протяжении всей работы приложения, загружаются при инициализации класса.
- Общность: Единственная копия поля является общей для всех экземпляров класса.
- Управление памятью: Metaspace динамически выделяется из native-памяти ОС (в отличие от фиксированного PermGen), что помогает избежать
OutOfMemoryError: PermGen space. - Сборка мусора: Может быть очищена сборщиком мусора, если загрузчик классов (
ClassLoader) и сам класс становятся недостижимыми.