Entonces, uno puede leer bytecode para implementar un intérprete/JVM. Se puede escribir/generar bytecode cuando se implementa un compilador de Java o un compilador para otro idioma que se dirigirá a la JVM (por ejemplo, Scala y Jython). Puede realizar una manipulación de bytecode para optimizar bytecode (si desea producir y comercializar un optimizador de bytecode o si lo necesita como una herramienta interna para dar al código de su empresa una ventaja sobre la competencia). En una línea similar, puede manipular bytecode para ofuscarlo antes de la distribución. También puede realizar la manipulación de bytecode para aspect-oriented programming; por ejemplo, es posible que desee insertar ganchos (tal vez para fines de cronometraje o de registro o por alguna otra razón), y si fuera más simple o menos costoso manipular el bytecode que editar todos los archivos fuente (como podría ser el caso si el código fuente no está disponible o proviene de muchas fuentes diferentes, no todas pueden estar bajo el control de uno o para las cuales puede ser costoso y lleva mucho tiempo convencer a esos equipos para que agreguen dichos ganchos), este podría ser un caso en el que haría Tiene sentido insertar las modificaciones a la salida final del bytecode en lugar de intentar modificar el código original (lo que puede requerir la subida o el mantenimiento de una bifurcación por separado, o la compra del código fuente de un tercero que suministra solo el bytecode).
Puede manipular bytecode usted mismo, aunque existen muchas bibliotecas y marcos de código abierto para hacerlo, incluidos BCEL y ASM, por nombrar solo un par.
Tal vez debería haber sido más claro en esto. Ya conozco esas bibliotecas y sé cómo funciona Java en el nivel de bytecode. Lo que realmente quiero saber es qué geniales técnicas inventaron las personas para hacer cosas que de otro modo no podrían hacer, así que tengo en mente esas soluciones cada vez que me tropiezo con tales problemas. – ahe