2012-06-21 23 views
2

Я читаю «Программирование для виртуальной машины Java» книги Джошуа Энгель, где автор предлагает «язык ассемблера для JVM» под названием Oolong.Что такое Oolong с точки зрения JVM?

Насколько я понимаю, это язык, который скомпилирован в java-байт-код и который действительно похож на исходный байт-код Java (здесь используется большое количество кодов операций байт-кода). Если это так, то почему он называется ассемблером? Это потому, что это низкоуровневый язык и выглядит как байт-код?

Другой вопрос касается Jasmin. Поскольку Wikipedia говорит, что это «бесплатный ассемблер с открытым исходным кодом для создания файлов классов из легко читаемого ассемблерного синтаксиса с использованием наборов инструкций Java Virtual Machine». Синтаксис Jasmin-файлов (которые также имеют расширение .j) выглядит как синтаксис Oolong. Используется ли там?

+0

См. [Спецификация виртуальной машины Java] (http://docs.oracle.com/javase/specs/jvms/se7/html/index.html) - он указывает инструкции Java-байт-кода. – Jesper

+0

@Sergey Я ищу книгу 'Программирование для виртуальной машины Java', у вас есть pdf? Спасибо. – smwikipedia

ответ

3

Oolong - это язык ассемблера для JVM.

... почему он называется ассемблером?

Лучше всего смотреть, что означает «язык ассемблера» (например, Википедия). Это, по сути, язык, который имеет прямое взаимно однозначное сопоставление между «операторами» и машинными инструкциями для целевой машины. OOlong соответствует этому описанию, если вы рассматриваете JVM как целевую машину. (Существует отображение взаимно-однозначное соответствие между инструкциями Улун и инструкциями байткодом.)

Синтаксис Jasmin файлов (которые также имеют .j расширение) выглядит следующим синтаксисом улун в. Используется ли там?

Я видел источники, которые говорят, что синтаксис Улонга «основан на Jasmin», но я не могу найти никаких отдельных документов, описывающих синтаксис.

Если вы заинтересованы в поиске на Улун, этот SO вопрос содержит информацию о том, где скачать с:

0

Улун - китайский чай, и имя не имеет значения. Помните, что язык Java скомпилирован java-компилятором. Java Bytecode не является языком ассемблера, но вы можете рассматривать его как язык ассемблера (JVM) Java Virtual Machine.

+0

Я не помню, что ОП, спрашивающий о происхождении имени, как компилируется язык Java, в значительной степени не имеет отношения к вопросу, а байт-код Java - это * не * "язык ассемблера для JVM". – Mac

0

Он использует стек, стека, и имеет байткоды что соответствуют реальному ассемблеру. Он также имеет инструкции более высокого уровня, которые будут извлекать поля из памяти, но не напрямую. Вы должны использовать getfield, putfield, invokespecial и т. Д. Поскольку JVM не работает в реальной аппаратной среде (например, в Unix Kernel), он не делает какого-либо тяжелого подъема, что реальная ОС действительно нравится обрабатывать процессы, беспокоясь о временных срезах и обслуживания прерываний, общения с драйверами устройств и включения и выключения. Я должен сказать, что JVM - это промежуточное ПО между Java и родной ОС. Это именно то, что они называют ... виртуальной машиной.

Смежные вопросы