Разрешение javac сделать это было бы ошибкой.Поскольку может быть код в другом jar-файле, который может полагаться на компилируемый код (модульность), изменение кода во время компиляции для оптимизации не является возможным вариантом.
Что касается второго аргумента «никогда не нужно перезагружаться из основной памяти», нужно помнить, что большинство переменных экземпляра кэшируются. final только указывает на неизменность, но не гарантирует изменчивость (volatile == всегда получать последние из основной памяти).Отсюда необходимость блокировок и изменчивого ключевого слова в многопоточной среде.
Что касается случая с горячей точкой, я понятия не имею, и хотел бы услышать больше об этом. final константы могут быть встроены во время компиляции, что обеспечивает умеренный прирост производительности.Ссылка на вопрос о встраивании в java
Редактировать:
Обратите внимание, что
final означает, что неизменность должна быть взята с зерном соли,Это не гарантирует, что состояние не может измениться, оно только указывает, что ссылка на объект может быть изменена.
final указывает неизменность для примитивных типов данных