← Назад к вопросам

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

1.7 Middle🔥 141 комментариев
#JVM и управление памятью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

Статические поля в Java хранятся в Method Area (или PermGen в JDK 7 и ранее, Metaspace в JDK 8+), которая является частью области памяти, управляемой JVM.

Подробно о месте хранения

Method Area — это область памяти, которая создаётся при запуске JVM и содержит:

  • Структурные данные каждого класса (имя, модификаторы)
  • Структуры данных констант
  • Данные статических полей ← сюда помещаются статические переменные
  • Байт-код методов
  • Таблицу методов

Отличие от обычных полей:

  • Статические поля — одно поле на ВСЕ экземпляры класса, хранятся в Method Area
  • Обычные поля — у каждого экземпляра свои значения, хранятся в куче (Heap)

Пример

public class Car {
    public static int totalCars = 0;  // Статическое поле - в Method Area
    public String color;              // Обычное поле - в Heap с каждым объектом
    
    public Car(String color) {
        this.color = color;
        totalCars++;  // Увеличивается в Method Area
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car("red");    // totalCars = 1
        Car car2 = new Car("blue");   // totalCars = 2
        Car car3 = new Car("green");  // totalCars = 3
        
        System.out.println(Car.totalCars);  // 3
        System.out.println(car1.totalCars); // 3 (одно и то же поле!)
    }
}

Жизненный цикл статического поля

  1. Инициализация класса — статическое поле создаётся в Method Area
  2. Назначение значения — происходит инициализация (по умолчанию null для объектов, 0 для чисел)
  3. Запуск программы — доступно со старта приложения через ClassName.fieldName
  4. Завершение JVM — статическое поле удаляется вместе с классом

Важные особенности

Одно поле на класс — все экземпляры обращаются к одному полю в памяти ✓ Живёт столько же, сколько класс — инициализируется при загрузке класса ✓ Потокобезопасность — если несколько потоков обращаются к статическому полю, может потребоваться синхронизация ✓ Доступен без создания объектаMath.PI, System.out и т.д.

Статические константы часто кэшируются JVM для быстрого доступа, поэтому они имеют минимальные накладные расходы на получение значения.