Изучение байт-кода Java и JVM

В недавнем вопросе, заданном недавно, мой простой ответ подчеркнул многие мои неправильные представления о Java, JVM и о том, как код компилируется и запускается. Это создало во мне желание поднять мое понимание на более низкий уровень. У меня нет проблем с низкоуровневым пониманием, таким как сборка, как меня смущает байт-код и JVM. То, как объектно-ориентированный код разбивается на низком уровне, для меня потеряно. Мне было интересно, есть ли у кого-нибудь предложения о том, как узнать о JVM, байт-коде и функционировании Java более низкого уровня. Существуют ли какие-либо утилиты, которые позволяют вам писать и запускать байт-код напрямую, так как я считаю, что практический опыт работы с чем-то - это лучший способ вырасти в понимании этого? Дополнительно и чтение предложений по этой теме будет принята с благодарностью.

Изменить: вторичный вопрос. Так что у меня есть своего рода подвопрос, ответы дали мне интересную идею, чтобы узнать о jvm, какова вероятность написания действительно простого языка, такого как brainf**k или Ook, только в читаемом синтаксисе (возможно, я мог бы даже разработать его поддерживать oo в конечном итоге), который компилируется в байт-код быть? Будет ли это хорошим опытом обучения?

6 ответов

Решение

Рекомендуемое чтение: спецификация JVM.

Вы также можете поиграть с BCEL - есть другие библиотеки для манипулирования байт-кодом, но это, вероятно, самая известная из них.

Apache BCEL позволит вам анализировать и вручную создавать файлы.class из байт-кода.

javap позволит вам разобрать существующие файлы.class. Это особенно полезно для того, чтобы разбить классы быстрого тестирования, чтобы понять, что на самом деле происходит под одеялом.

Я научился читать учебник по ASM и изучать саму библиотеку.

ИМХО, ASM лучше, чем BECL.

BCEL уже успешно используется в нескольких проектах, таких как компиляторы, оптимизаторы, обфускаторы, генераторы кода и инструменты анализа. К сожалению, за последние несколько лет не было большого развития. Не стесняйтесь помочь, или вы можете заглянуть в проект ASM на objectweb. - http://jakarta.apache.org/bcel/

Существует только один надежный источник для понимания JVM

Спецификация виртуальной машины Java® Java SE 7 Edition

http://docs.oracle.com/javase/specs/jvms/se7/html/index.html

Программирование для виртуальной машины Java - хорошая книга для этой темы. (Раскрытие: я работаю с автором.)

Для понимания архитектуры Java/ JVM: прочитайте Википедию, спецификации и исходный код.

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

В C вы можете достичь вышеуказанного, например, с помощью комбинации указателей функций и вложенных структур.

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