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