Aprender sobre el código de bytes de Java y la JVM.
-
05-07-2019 - |
Pregunta
En una pregunta reciente que hice recientemente, mi simple respuesta resaltó muchos de mis conceptos erróneos sobre Java, la JVM y cómo se compila y ejecuta el código. Esto ha creado un deseo en mí de llevar mi comprensión a un nivel inferior. No tengo problemas con la comprensión de bajo nivel, como el ensamblado, como el bytecode y la JVM me confunden. ¿Cómo se descompone el código orientado a objetos en un nivel bajo? Me preguntaba si alguien tenía alguna sugerencia sobre cómo aprender sobre la JVM, el código de bytes y el funcionamiento de Java de nivel inferior. ¿Hay alguna utilidad que le permita escribir y ejecutar bytecode directamente, ya que creo que la experiencia práctica con algo es la mejor manera de entenderlo? Además, se agradecerán las sugerencias de lectura sobre este tema.
Editar: Pregunta secundaria. Entonces, tengo un poco de pregunta secundaria, las respuestas me dieron una idea interesante para aprender sobre el JVM, ¿cuál sería la plausibilidad de escribir un lenguaje muy simple como brainf ** k u Ook solo en una sintaxis legible (tal vez incluso podría desarrollarlo?) para soportar oo eventualmente) que compila en bytecode be? ¿Sería una buena experiencia de aprendizaje?
Solución
Lectura sugerida: la especificación de JVM .
También puedes jugar con BCEL . Hay otras bibliotecas para manipular el código de bytes, pero ese es probablemente el más conocido.
Otros consejos
El Apache BCEL le permitirá analizar y crear manualmente archivos .class de bytecode.
javap le permitirá desensamblar archivos .class existentes. Es particularmente útil para eliminar clases de pruebas rápidas para comprender lo que realmente está pasando debajo de las cubiertas.
Aprendí leyendo el tutorial de ASM y repasando la biblioteca.
En mi humilde opinión, ASM es mejor que BECL.
BCEL ya está siendo utilizado con éxito en varios proyectos tales como compiladores, optimizadores, ofuscadores, generadores de código y herramientas de análisis. Lamentablemente hay no ha habido mucho desarrollo pasando en los últimos años . No dude en ayuda o es posible que desee tener un mirar en el proyecto ASM en objectweb. - http://jakarta.apache.org/bcel/
Solo hay una fuente confiable para la comprensión de JVM
La especificación de la máquina virtual Java® Edición Java SE 7
http://docs.oracle.com/javase/ especificaciones / jvms / se7 / html / index.html
Programar para la Máquina Virtual de Java es un buen libro para este tema. (Divulgación: trabajo con el autor).
Para comprender Java / la arquitectura de la JVM: lea Wikipedia, las especificaciones y el código fuente.
Para comprender cómo se realiza el código orientado a objetos en un nivel bajo: intente y emule características como la herencia / polimorfismo / encapsulación en un lenguaje de nivel inferior como el C.
En C puede lograr lo anterior mediante, por ejemplo, una combinación de punteros de función y estructuras anidadas.