Вопрос

В недавно заданном вопросе мой простой ответ высветил многие из моих неправильных представлений о 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 вы можете достичь вышеуказанного, например, с помощью комбинации указателей функций и вложенных структур.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top