Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Предлагаемое чтение: спецификация JVM.

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

Ответ 2

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

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

Ответ 3

Я узнал, прочитав учебное пособие по ASM и обманывая себя самой библиотекой.

IMHO, ASM лучше, чем BECL.

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

Ответ 4

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

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

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