Какие задачи низкого уровня могут выполняться на JVM, но не выраженные в java?

Какая полезная (для производительности или иначе) конструкция является действительным байтовым кодом, но не выражаемым в Java?

Ответ 1

  • Вы можете выбросить любой объект, а не только исключение.
  • Вы можете перегружать возвращаемый тип.
  • Вы можете выбросить любое исключение без объявления его в бросках.

Ответ 2

Байт-код JVM представляет собой язык стекового программирования, поэтому большинство команд управления стеком не имеют смысла в Java, например. dup, swap и т.д. Произвольное goto, конечно, также не выражается в Java.

Что-то вроде JSR 292 предлагает поддержку динамически типизированных языков, которые я не думаю, что Java планирует стать.

Я думаю, что кое-что нужно решить здесь, хотя: ваш вопрос, по-видимому, по крайней мере частично мотивирован проблемой производительности. На практике байт-коды скомпилированы JIT для сборки. Независимо от того, действительно ли супер-магическая инструкция по байт-коду действительно довольно спорна.

Ответ 3

Я прочитал, что сигнатуры метода байт-кода поддерживают множественную диспетчеризацию по типам возврата, тогда как Java допускает только методы с тем же именем для отправки по типам параметров.

Ответ 4

Иногда также верно и обратное.

Например, видимость внутренних классов Java не может быть представлена ​​в байт-коде. JVM знает только защищенную от пакетов, защищенную, открытую и закрытую видимость. Поэтому компилятор Java должен использовать хак: он генерирует синтетические методы-обертки (которые видны в пакете), чтобы подвергать частные поля и методы внутренних классов внешнему классу.