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