Ответ 1
Nashorn может использовать "оптимистичные типы" (более подробно), и они включены по умолчанию в Java 9 и более поздних версиях, но они вызывают задержки при запуске.
Выключение оптимистических типов дает:
$ time jjs --optimistic-types=false moment-with-locales.js
real 0m4.282s
user 0m0.000s
sys 0m0.015s
Переключатель может быть сокращен -ot=false
.
jjs -h
определяет оптимистические типы следующим образом:
Используйте предположения оптимистического типа с деоптимизацией перекомпиляции. Это заставляет компилятор попробовать, для любого символа программы, тип которого не может быть доказан во время компиляции, набирать его как можно более узким и примитивным. Если среда выполнения встречает ошибку, поскольку тип символа слишком узкий, более широкий метод будет генерироваться до достижения устойчивого уровня. Хотя это дает как можно более оптимальный Java-байт-код, ошибочные догадки типа приведут к более продолжительному разминке. Оптимистическая типизация в настоящее время включена по умолчанию, но может быть отключена для более быстрой загрузки.
Таким образом, оптимистичная типизация может обеспечить более высокую производительность в долгосрочной перспективе (хотя это не гарантируется), но приводит к более медленному запуску.