Который полезный (для производительности или иначе) конструкции являются допустимым байт-кодом, но не выразимые в Java?
Иногда бывает и обратное.
Например, видимость внутренних классов Java не может быть представлена в байт-коде. JVM знает только защищенный пакет, защищенный, общедоступный и частный видимость. Таким образом, компилятор Java должен использовать хитрость: он генерирует синтетические методы-оболочки (которые видны для пакетов), чтобы предоставить внешнему классу частные поля и методы внутренних классов.
Байт-код JVM - это стек-ориентированный язык программирования , поэтому большинство инструкций управления стеком не имеют смысла в Java, например dup
, swap
и т. Д. Произвольный goto
, конечно, также не может быть выражен в Java.
Что-то вроде JSR 292 предлагает поддержку языков с динамической типизацией, чем я не думаю, что Java планирует стать.
Я думаю, что здесь нужно кое-что обсудить: похоже, ваш вопрос, по крайней мере, частично мотивирован проблемой производительности. На практике байт-коды JIT-компилируются в сборку. Есть ли там супермагическая инструкция по байт-коду, на самом деле довольно спорный вопрос.
Я читал, что сигнатуры методов байткода поддерживают множественную диспетчеризацию на возвращаемые типы, тогда как Java позволяет методам с одинаковым именем диспетчеризировать только типы параметров.