Статические методы (фактически все методы), а также статические переменные хранятся в PermGenразделе кучи, поскольку они являются частью данных отражения (данные, относящиеся к классу, а не к экземплярам).
Обновление для уточнения :
Обратите внимание, что в пространстве PermGen хранятся только переменные и их технические значения (примитивы или ссылки).
Если ваша статическая переменная является ссылкой на объект, сам объект хранится в обычных разделах кучи (молодое / старое поколение или пространство оставшихся в живых). Эти объекты (если они не являются внутренними объектами, такими как классы и т. Д.) Не хранятся в пространстве PermGen.
Пример:
static int i = 1; //the value 1 is stored in the PermGen section
static Object o = new SomeObject(); //the reference(pointer/memory address) is stored in the PermGen section, the object itself is not.
Несколько слов о сборке мусора:
Вы не полагаться на , finalize()как это не гарантированно работать. JVM полностью решает, когда запускать сборщик мусора и что собирать, даже если объект подходит для сборки мусора.
Конечно, вы можете установить для статической переменной значение null и таким образом удалить ссылку на объект в куче, но это не означает, что сборщик мусора будет собирать его (даже если ссылок больше нет).
Кроме того finalize(), запускается только один раз, поэтому вы должны убедиться, что он не вызывает исключений или иным образом не препятствует сбору объекта. Если вы остановите финализацию через какое-то исключение, finalize()не будет вызван для того же объекта второй раз.
Последнее замечание : способ хранения кода, данных времени выполнения и т. Д. Зависит от используемой JVM, т.е. HotSpot может делать это иначе, чем JRockit, и это может даже отличаться между версиями одной и той же JVM. Вышеупомянутое основано на HotSpot для Java 5 и 6 (они в основном одинаковы), поскольку на момент ответа я бы сказал, что большинство людей использовали эти JVM. Из-за значительных изменений в модели памяти, начиная с Java 8, приведенные выше утверждения могут быть неверными для Java 8 HotSpot - и я не проверял изменения Java 7 HotSpot, поэтому я предполагаю, что вышесказанное по-прежнему верно для этой версии, но я здесь не уверен.