Откуда непосредственно связан статический финал? молодой ген или старый ген или пермский ген? - PullRequest
2 голосов
/ 27 сентября 2010

Является ли «статический финал» непосредственно отнесенным к молодому, старому или перманентному поколению?(Я предполагаю, что скорее всего он попадет в старый ген с течением времени.) Если он будет выделен в perm gen, будет ли он собираться мусором, когда в Perm Gen будет происходить выгрузка классов?

1 Ответ

8 голосов
/ 27 сентября 2010

Является ли «статический финал» непосредственно назначенным молодому поколению, старому поколению или пермому?

Объект, на который ссылается переменная static final, будет распределен по тем же правиламкак и любой другой объект.Скорее всего, оно будет выделено в молодом поколении или в старом поколении (если оно большое и применяются некоторые другие условия).

Объект будет выделен с помощью new, выполняющегося в некотором произвольном коде.JVM не может знать, что объект (в конечном итоге) будет назначен переменной static final.

Пространство для кадра, содержащего статические переменные, вероятно, выделено в permGen.Конечно, это не обычный Java-объект.

Если он будет выделен в perm gen, будет ли он собираться мусором, когда выгрузка классов будет происходить в Perm Gen?

Это зависит от того, собирается ли permGen сборщиком мусора.В современных JVM это так, и я ожидаю, что объекты, на которые ссылается статика незагруженных классов, будут собираться мусором в том же цикле GC или в следующем ... при условии, что они недоступны.

В любом случае,Вы не должны кодировать свое приложение, чтобы зависеть от любой из этих деталей.Они специфичны для JVM.


Обратите внимание, что с Java 8 этот вопрос является спорным, поскольку permgen не более .

...