¿JDK 7 permitirá que un programa altere su propio código?
Pregunta
Noté una API del compilador en JDK 7. ¿Significa esto que un programa Java puede recompilar y alterar la definición de un programa en ejecución?
En este momento sé que productos como Javarebel pueden hacer esto, pero para ofrecer una descarga gratuita de un producto excluye a Javarebel, que es un producto pagado.
Solución
La API del compilador ya está disponible en Java 6.
No podemos cambiar el código de las clases ya cargadas: el reemplazo del código caliente aún se limitará a la depuración, pero podemos compilar el código fuente de las aplicaciones Java y cargar clases recién creadas en tiempo de ejecución.
Otros consejos
Sí, es posible. Una forma es escribir un cargador de clase especializado y usar una herramienta de mejora de bytecode como ASM y ALTER partes de su aplicación en tiempo de ejecución. También es posible lograr lo mismo usando un javaagent
y otra vez ASM
o algo similar.
Hasta donde yo sé, Java 7 no presenta métodos adicionales de auto-modificación.
Algunos de los efectos ya se pueden hacer utilizando la API del compilador y ClassLoaders
, mientras que otros se pueden hacer usando el JVM Ti.
Pero hasta donde yo sé, Java 7 no introduce ningún cambio importante en esas API.
Hay un proyecto para agregar la funcionalidad de recarga de clase tipo Jrebel a OpenJDK 7, aunque actualmente no forma parte de Open JDK 7: Código dinámico Evolution VM (DCEVM)
Funciona a través de lo normal Jvmti Mecanismo de redefinición de clase.
Jabalí ofrece funcionalidad a lo largo de estas líneas; Está disponible sin costo, pero no es redistribuible libremente.
La API del compilador (JSR 199) tiene poco que ver con la recarga del código o la auto-modificación, excepto en la medida en que un programa que desea cargar un nuevo bytecode de alguna manera podría usar 199 para construir ese bytecode a partir de la fuente de Java, en lugar de usar una API de ensamblador como asm.
Actualizar:
Parece que Javelon ya no está disponible, ya que ha sido adquirido por Zeroturnaround (creadores de Jrebel)
Desde la página de inicio de Javelon:
Nota: Javeleon ya no estará disponible para descargar como un producto independiente.