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

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

11
задан mike g 9 March 2010 в 03:12
поделиться

4 ответа

  1. Вы можете выбросить любой объект, а не только исключение.
  2. Вы можете перегрузить по возвращаемому типу.
  3. Вы можете генерировать любое исключение, не объявляя его в throw.
6
ответ дан 3 December 2019 в 09:19
поделиться

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

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

1
ответ дан 3 December 2019 в 09:19
поделиться

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

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

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

3
ответ дан 3 December 2019 в 09:19
поделиться

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

2
ответ дан 3 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: