Хорошо, поэтому я развиваюсь на Java уже более года и прилагаю усилия, чтобы глубже погрузиться в язык и его лучшие практики.
Итак, вот что я знаю:
-
Java "проходит по типу" - это примитивы, передаваемые копией и ссылкой на объект по копии (ссылки указывают на их объект в куче).
-
Примитивные переменные экземпляра и ссылки живут в их объекте класса в куче и локальных примитивах и ссылках, находящихся в стеке (в их соответствующем стеке стека).
-
Память памяти пермского генератора, где хранятся метаданные класса (используется для отражения).
-
В куче есть пространство Эдена, где находятся новые объекты, пространство Юнга, в котором хранятся объекты, которые выжили в GC, и пространство Tenured, в котором размещаются объекты с длинным проживанием.
Итак, вот что я хотел бы понять:
-
Где статические и статические окончательные примитивы и ссылки живут, что JVM может использовать один экземпляр?
-
Являются ли статические и статические конечные объекты, хранящиеся в куче (я предполагаю, что они перемещены в режим ожидания)?
-
Что считается лучшей практикой в отношении количества статических окончательных ссылок в приложении?
-
Будет ли создание более статических окончательных ссылок уменьшать количество пространства кучи в JVM?
Я читал много разных объяснений об этом (все были разные) и хотел бы, чтобы опытный ветеран на языке Java мог дать хорошее объяснение. Спасибо заранее!