Изучение байт-кода Java и JVM - PullRequest
35 голосов
/ 30 июля 2009

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

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

Ответы [ 6 ]

30 голосов
/ 30 июля 2009

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

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

12 голосов
/ 30 июля 2009

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

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

4 голосов
/ 30 июля 2009

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

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

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

2 голосов
/ 22 января 2014

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

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

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

1 голос
/ 30 июля 2009

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

1 голос
/ 30 июля 2009

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

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

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

...