Есть ли какая-либо причина для копирования поля final в локальную конечную переменную?
Переведено автоматически
Ответ 1
Это экстремальная оптимизация, которую любит использовать Дуг Ли, автор класса. Вот сообщение в недавнем потоке в списке рассылки core-libs-dev именно на эту тему, которое довольно хорошо отвечает на ваш вопрос.
из сообщения:
... копирование в locals создает наименьший байт-код, а для низкоуровневого кода приятно писать код, который немного ближе к машине
компилятор не может легко доказать, что конечное поле не изменяется внутри метода (из-за отражения / сериализации и т.д.)
большинство современных компиляторов на самом деле не пытаются, и поэтому им придется перезагружать final field каждый раз, когда оно используется, что может привести к пропуску кэша или ошибке страницы
сохранение его в локальной переменной вынуждает JVM выполнять только одну загрузку