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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top