Что javap -c делает с файлом классов?

На самом деле, вопрос немного шире. Я знаю, что javac компилирует файл java в байт-код, файл класса. Итак, файл класса должен содержать инструкции jvm и все такое. С другой стороны, единственный способ увидеть эти инструкции - декомпилировать файл класса с помощью javap -c. Но это не декомпиляция, верно? Потому что, если бы он декомпилировался, это дало бы файл Java. Итак, я предполагаю, что javac компилирует java-файл примерно 2 раза (что на самом деле неверно, но давайте для простоты предположим), сначала в инструкцию jvm, затем в байт-код, поэтому javap -c декомпилирует из байт-кода в инструкции jvm. Jvm должен понимать байт-код, поэтому он не может понять инструкции. Я немного запутался здесь. Может кто-нибудь объяснить, что здесь происходит?

2 ответа

Решение

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

javap отображает удобочитаемую форму инструкций JVM. Инструкции JVM являются кодами для JVM. Какие javap показывает язык ассемблера.

Если вы хотите увидеть байт-код в более читаемой форме, используйте декомпилятор java, например, jad. Для jad есть несколько оболочек пользовательского интерфейса, включая плагин для Eclipse.

Другие вопросы по тегам