Согласно Scala 2.10, каковы преимущества (если таковые имеются) испускания байт-кода для JVM 1.7 по сравнению со значением по умолчанию для испускания для 1.6?
Преимущества Scala испускания байт-кода для JVM 1.7
Ответ 1
Предыдущая версия Scala, выпущенная версия 49.0 байтового кода, соответствующая Java 5. С Scala 2.10 version значение по умолчанию было изменено на версию 50.0, соответствует Java 6 и имеет главное преимущество активации более быстрого верификатора, введенного с этой версией, поэтому это должно привести к (немного) улучшению производительности во время выполнения.
Как вы заметили, с 2.10 стало возможным испускать код версии 51.0 байт, что соответствует Java 7. Есть несколько отличий между версией 50.0 и версией 51.0: самым большим является включение инструкции invokedynamic
, с связанная с ним (см. определение формата файла класса для деталей gory).
Что касается использования Scala использования кода в 51,0 байт, хотя технические части на месте, я понимаю, что работа все еще находится на экспериментальной стадии использования этой функции. См. эту презентацию EPFL и этот поток, который показывает, что команда работает над получением преимуществ производительности обработчиков методов без необходимости вводить зависимость от Java 7.
Scala 2.11 поддерживал по умолчанию байт-код с выпуском версии 50.0, но официальный план теперь должен перейти прямо к байт-коду Java 8 с помощью Scala 2.12. Тем временем, существует новый back-end для Scala 2.11, который позволит вам попробовать некоторые из функции, которые прототипируются для Scala 2.12, и которые станут исходными по умолчанию с Scala 2.12.
В любом случае долгожданные предлагаемые преимущества исходят из использования байт-кода invokedynamic
(и связанных с ним структур MethodHandle). К ним относятся:
- сокращение размера кода и времени выполнения для закрытия
- улучшение специализации типовых типов данных
- потенциально более быстрые структурные типы
(Спойлер: использование MethodHandles
для реализации замыканий в экспериментальном бэкэнде в настоящее время медленнее, чем настоящее оптимизированное создание замыкания!)