Статические методы и переменные класса хранятся в области памяти, называемой Method Area (также известной как Non-Heap Memory или Permanent Generation в более старых версиях JVM, а в Java 8+ как Metaspace). Эта область памяти выделяется для хранения данных на уровне класса, а не на уровне экземпляра объекта.
Вот более подробное описание:
Method Area: Это центральное место для хранения информации о классах, включая байт-код методов, статические переменные, константы, информацию о конструкторах и другие метаданные класса. Эта область памяти является общей для всех потоков в JVM.
Static Variables:
Static Methods:
Пример:
java
Таблица-сравнение статических и нестатических членов:
| Характеристика | Статические члены | Нестатические члены |
|---|---|---|
| Расположение | Method Area (Metaspace/PermGen) | Память кучи (для каждого объекта) |
| Количество | Одна копия на весь класс | Одна копия на каждый объект |
| Доступ | Через имя класса или объект (не рекомендуется) | Через экземпляр объекта |
| Связь с объектом | Не связаны с конкретным объектом | Связаны с конкретным объектом |
| Инициализация | При загрузке класса | При создании объекта |
Таким образом, статические члены класса находятся в Method Area, отделенной от памяти кучи, где хранятся экземпляры объектов.