2009-07-30 16 views
28

En una pregunta reciente, mi simple respuesta destacó muchos de mis conceptos erróneos acerca de Java, la JVM, y cómo se compila y se ejecuta el código. Esto ha creado un deseo en mí de llevar mi comprensión a un nivel más bajo. No tengo problemas con el bajo nivel de comprensión como el ensamblado, sin embargo, el bytecode y la JVM me confunden. Cómo se descompone el código orientado a objetos en un nivel bajo, se pierde para mí. Me preguntaba si alguien tenía alguna sugerencia sobre cómo aprender sobre la JVM, el bytecode y el funcionamiento de nivel inferior de Java. ¿Hay utilidades que le permitan escribir y ejecutar bytecode directamente, ya que creo que la experiencia práctica con algo es la mejor manera de aumentar su comprensión? Además, se agradecerán las sugerencias de lectura sobre este tema.Aprendiendo sobre el bytecode de Java y la JVM

Editar: Pregunta secundaria. Así que tengo una pequeña pregunta secundaria, las respuestas me dieron una idea interesante para aprender sobre el jvm, ¿cuál sería la verosimilitud de escribir un lenguaje realmente simple como brainf ** k u Ook solo en una sintaxis legible (tal vez incluso podría desarrollarlo? para admitir oo eventualmente) que compila en bytecode be? ¿Sería esa una buena experiencia de aprendizaje?

+2

+1 para dar brainf ** k el atributo 'simple' ;-) –

+0

Supongo que "simple" se usó en un sentido de pequeña complejidad, no de facilidad de uso;) – SasQ

Respuesta

29

Lectura sugerida: the JVM spec.

Es posible que también quiera jugar con BCEL - hay otras bibliotecas alrededor para manipular bytecode, pero esa es probablemente la más conocida.

+0

No sabía que tal especificación existía. Eso es realmente útil. –

11

El Apache BCEL le permitirá analizar y crear archivos .class de oftecode.

javap le permitirá desmontar archivos .class existentes. Es particularmente útil para llamar las clases de prueba rápida para comprender lo que realmente sucede debajo de las carátulas.

1

Para entender la arquitectura de Java/JVM: lea Wikipedia, las especificaciones y el código fuente.

para la comprensión de cómo el código orientado a objetos se realiza en un nivel bajo: tratar de emular las características como la herencia/polimorfismo/encapsulado en un lenguaje de bajo nivel como C

En C se puede lograr lo anterior a través, por ejemplo, una combinación de indicadores de función y estructuras anidadas.

+0

Me gusta mucho esta segunda sugerencia. Creo que debo intentar idear una forma elegante de hacerlo. Sé de algunos realmente intrincados para el polimorfismo y la herencia, pero todos son técnicas realmente ineficientes que se me ocurrieron que probablemente ni siquiera cuentan como emular las características. –

+0

Se agregó más información sobre cómo hacer esto en C. En realidad, no es tan difícil cuando se tiene un buen conocimiento del idioma y cómo funcionan los punteros. –

+0

@MikeMcQuaid: ¿qué hay de implementar cierres en C? – SasQ

3

Lo aprendí leyendo the ASM tutorial y haciendo mucking con la biblioteca.

En mi humilde opinión, ASM es mejor que BECL.

BCEL ya está siendo utilizado éxito en varios proyectos tales como compiladores, optimizadores, obsfuscators, generadores de código y herramientas de análisis . Desafortunadamente, no ha sido mucho desarrollo en en los últimos años. Siéntase libre de ayudar o es posible que desee tener una mirada en el proyecto ASM en objectweb. - http://jakarta.apache.org/bcel/

+3

Proyecto ASM: http://asm.ow2.org/ – sova

+0

Y Krakatau es mucho mejor que ASM si realmente desea escribir bytecode a mano. – Antimony

+0

lo siento, el enlace 'the ASM tutorial' se ha ido – zionpi

Cuestiones relacionadas