Является ли «статический финал» непосредственно назначенным молодому поколению, старому поколению или пермому?
Объект, на который ссылается переменная static final
, будет распределен по тем же правиламкак и любой другой объект.Скорее всего, оно будет выделено в молодом поколении или в старом поколении (если оно большое и применяются некоторые другие условия).
Объект будет выделен с помощью new
, выполняющегося в некотором произвольном коде.JVM не может знать, что объект (в конечном итоге) будет назначен переменной static final
.
Пространство для кадра, содержащего статические переменные, вероятно, выделено в permGen.Конечно, это не обычный Java-объект.
Если он будет выделен в perm gen, будет ли он собираться мусором, когда выгрузка классов будет происходить в Perm Gen?
Это зависит от того, собирается ли permGen сборщиком мусора.В современных JVM это так, и я ожидаю, что объекты, на которые ссылается статика незагруженных классов, будут собираться мусором в том же цикле GC или в следующем ... при условии, что они недоступны.
В любом случае,Вы не должны кодировать свое приложение, чтобы зависеть от любой из этих деталей.Они специфичны для JVM.
Обратите внимание, что с Java 8 этот вопрос является спорным, поскольку permgen не более .