Извините, это очень базовый уровень информатики. Виртуальная машина Java генерирует 0 и 1 или код ассемблера? Если он генерирует код на ассемблере, к процессору присоединен ассемблер, который преобразует это в 0 и 1? Или, если он генерирует 0 и 1, нужен ли процессору ассемблер? Если да, то для чего?
2 ответа
Компилятор Java (не JVM) берет исходный код Java (который по сути все еще просто 0 и 1, но определенный определенный набор 0 и 1, который может представлять информацию, с которой людям легко иметь дело, например читаемый текст) и компилирует это байт-код Java, который имеет 0 и 1 с другим значением.
Байт-код Java концептуально похож на "ассемблер", за исключением того, что это независимые от платформы инструкции, предназначенные для интерпретации виртуальной машиной Java. JVM действует как "транслятор" между байт-кодом Java и собственным байт-кодом (то есть машинными инструкциями для фактического оборудования, на котором он работает) - концептуально, как, скажем, эмулятор Nintendo. Именно это позволяет скомпилированной Java работать на любой платформе.
Итак, чтобы ответить на ваш вопрос напрямую: JVM не генерирует байт-код Java; компилятор Java это делает, а JVM интерпретирует этот байт-код и "заставляет вещи происходить".
Однако в наше время усовершенствованные JVM делают больше, чем просто интерпретируют - например, технология "HotSpot", о которой вы, возможно, слышали, позволяет JVM динамически определять, какие части вашего байт-кода Java выполняются часто (и поэтому может извлечь выгоду из ускорить), а затем взять эти части и преобразовать их в полный нативный байт-код на лету (таким образом, оригинальный байт-код Java больше не интерпретируется, а новый, более быстрый нативный байт-код запускается напрямую). Все это происходит прозрачно с вашей Java-программой. Давным-давно Java подвергался большой критике за медлительность, но эти дни в основном прошли с появлением HotSpot и подобных технологий.
Таким образом , в некотором смысле, современные JVMs делать генерировать "0 и 1", в том , что они генерируют дополнительный машинный код из инструкций ввода Java; но с осторожностью относитесь к данным как "0 и 1" - каждая часть цифровых данных - "0 и 1" (часто организованная в группы из 8 двоичных цифр, называемых "байт"), от машинного кода до исходного кода программы и текста к изображениям в MP3 к чему угодно.
Вы можете найти хорошее описание того, как JVM работает здесь.
Для очень конкретных спецификаций языка Java, байт-кода Java и того, как компилятор и виртуальная машина должны вести себя, здесь можно найти спецификацию языка и виртуальной машины.
Он генерирует Java-байт-код, который является специальным набором инструкций только для JVM. Это сопоставимо, но не совпадает с машинным кодом (нули и единицы).
Смотрите здесь: Java bytecode (Wikipedia) (прокрутите вниз до раздела Пример).