java jvm-hotspot hotswap

java - Código avanzado de intercambio en caliente en JDK 8?



jvm-hotspot hotswap (2)

Estoy buscando HotSwapping mejor en el JavaVM. Ser capaz de aplicar solo los cambios en el cuerpo del método está bien, pero es bastante limitado.

Las opciones disponibles son JRebel y un proyecto discontinuo denominado Máquina virtual de evolución de código dinámico (DCEVM) .

Hay un JEP 159 por ahí que fue escrito por el desarrollador principal de DCEVM. Una publicación del blog de 2011 mencionó que los desarrolladores de DCEVM ahora trabajan para que Oracle los integre en el JDK.

¿Ya tenemos este tipo de soporte para JDK 8 beta o fue pospuesto a JDK 9?

Necesito intercambio en caliente para agregar y eliminar y cambiar el nombre de los métodos privados principalmente. Esto ayudaría mucho. ¿Hay algún producto que me permita hacerlo? (Además de JRebel, las campañas de relaciones públicas me molestaron).

La última versión compatible de DCEVM es para 1.6u24 y solo proporciona binarios de Linux de 32 bits. Desde que uso 1.7 y 64 bits de Linux, esto es un obstáculo para mí.

También hay otro proyecto disponible en github llamado Fakereplace . ¿Puedo usar esto fácilmente para mi propósito o no debería investigar sobre esto?


Hay una bifurcación de DCEVM mantenida en el repositorio en Github . Se actualizó recientemente para Java 8. Los binarios están disponibles a través de las versiones de GitHub o en la página de descargas .

Para cosas simples, como agregar / eliminar métodos, debería ser bastante confiable (verificado por pruebas automatizadas en 16 configuraciones diferentes). Sin embargo, aún podría bloquearse JVM, por lo que no debe utilizarse en la producción.


Los JEP que vienen en JDK 8 y JDK 9 se enumeran en esta página . JEP-159 no está entre ellos. Desde el índice jep puede ver que JEP-159 aún no está dirigido a ninguna versión de JDK, ni siquiera a jdk 10.

El estado de JEP-159 es actualmente "Enviado" . El proceso se describe a continuación:

Un JEP exitoso pasa por los siguientes estados:

  • Borrador - En circulación por el autor para la revisión inicial y la creación de consenso.
  • Publicado: ingresado en el archivo JEP por el autor para una revisión más amplia
  • Enviado - Declarado por el autor para estar listo para su evaluación
  • Candidato: aceptado para su inclusión en la Hoja de ruta por OpenJDK Lead
  • Financiado - Juzgado por un líder de grupo o área que se financiará completamente
  • Completado - Terminado y entregado

Así que aún no es aceptado para cualquier hoja de ruta.