Одним словом: Да.
V8 компилирует код в промежуточный байт-код, затем «горячие точки» анализируются компилятором «Crankshaft», и если он определяет, что некоторые переменные никогда не будут чем-то иным, кроме целого числа, двойного числа, строки и т. Д. on, он генерирует машинный код с «распакованным».
Эта оптимизация выполняется только на тех ветвях, которые уже пройдены; другие откладываются до тех пор, пока информация о реальных задействованных типах не будет вычислена «обычным» механизмом, а затем введена в оптимизированный код.
Кроме того, V8 может преобразовывать по существу статические иерархии прототипов в «классическое» наследование объектов в стиле C ++ для повышения производительности «сложных» типов.
Однако он может делать все это только в коде, который называется «часто»; как циклы или часто вызываемые функции.
Ссылка на статью (часть серии) объясняет это во многом, намного более подробно и, безусловно, стоит прочитать.
РЕДАКТИРОВАТЬ: Но, конечно же, статически типизированный язык, такой как Java, оптимизирует как можно большую часть кода во время компиляции, поэтому он должен опережать Javascript во всех, кроме игрушечных тестах. Тем не менее, V8 сокращает разрыв между ними, и написание Javascript намного «веселее», чем Java или C ++, поэтому первоначальное создание прототипа или разработка программ, где пользователь является источником наибольшей задержки, означает, что Javascript часто является лучшим выбором. по-моему.