Изучение байт-кода Java и JVM
-
05-07-2019 - |
Вопрос
В недавно заданном вопросе мой простой ответ высветил многие из моих неправильных представлений о Java, JVM и о том, как код компилируется и запускается. Это создало во мне желание поднять мое понимание на более низкий уровень. У меня нет проблем с низкоуровневым пониманием, таким как сборка, как меня смущает байт-код и JVM. То, как объектно-ориентированный код разбивается на низком уровне, для меня потеряно. Мне было интересно, есть ли у кого-нибудь предложения о том, как узнать о JVM, байт-коде и функционировании Java более низкого уровня. Существуют ли какие-либо утилиты, которые позволяют вам писать и запускать байт-код напрямую, так как я считаю, что практический опыт работы с чем-то является лучшим способом для его понимания? Кроме того, чтение предложений по этой теме будет оценено.
Редактировать: дополнительный вопрос. Так что у меня есть своего рода подвопрос, ответы дали мне интересную идею, чтобы узнать о jvm, какова вероятность написания действительно простого языка, такого как brainf ** k или Ook, только в читаемом синтаксисе (возможно, я мог бы даже разработать его поддерживать oo в конце концов), который компилируется в байт-код быть? Будет ли это хорошим опытом обучения?
Решение
Рекомендуется прочитать: спецификацию JVM .
Вы также можете поиграть с BCEL - есть другие библиотеки для манипулирования байт-кодом, но это, вероятно, самый известный.
Другие советы
Apache BCEL позволит вам анализировать и обрабатывать файлы .class из байт-кода. р>
javap позволит вам разобрать существующие файлы .class. Это особенно полезно для того, чтобы разбить классы быстрого тестирования, чтобы понять, что на самом деле происходит под одеялом.
Я узнал, прочитав учебник по ASM и копаться в самой библиотеке. Р>
ИМХО, ASM лучше, чем BECL.
BCEL уже используется успешно в нескольких проектах таких в качестве компиляторов, оптимизаторов, обфускаторы, генераторы кода и инструменты анализа. К сожалению, там не было большого развития происходящего за последние несколько лет . Не стесняйтесь помочь или вы можете иметь заглянуть в проект ASM на ObjectWeb. - http://jakarta.apache.org/bcel/
Существует только один надежный источник для понимания JVM
Java & # 174; Спецификация виртуальной машины Java SE 7 Edition
http://docs.oracle.com/javase/ функции / JVMs / SE7 / html / index.html
Программирование для виртуальной машины Java - хорошая книга для этой темы. (Раскрытие: я работаю с автором.)
Для понимания архитектуры Java / JVM: прочитайте Википедию, спецификации и исходный код.
Чтобы понять, как объектно-ориентированный код выполняется на низком уровне, попробуйте и эмулируйте такие функции, как наследование / полиморфизм / инкапсуляция, в языке более низкого уровня, например C.
В C вы можете достичь вышеуказанного, например, с помощью комбинации указателей функций и вложенных структур.