Tengo una aplicación antigua escrita con Java 7. Se ejecuta bien en Java 8 JRE. No planeo reescribir ninguno de los códigos para utilizar las funciones de Java 8. ¿Existe algún beneficio técnico al actualizar el código compilado al último Java 8 JDK?
Para ser claros, el código está actualmente compilado con Java 7 y ya se está ejecutando con el último Java 8 JRE. Ya debería beneficiarse de las mejoras en tiempo de ejecución de Java 8. Esta pregunta es si se obtendrían beneficios compilando con la versión 8 y ejecutando con el código de bytes compilado de Java 8.
Además, no me interesan los beneficios no técnicos, como la productividad del desarrollador. Creo que esos son importantes, pero no el punto de esta pregunta. Pido por el bien del código de producción que NO tiene equipo de desarrollo. Está puramente en modo de mantenimiento.
fuente
Respuestas:
Si entiendo la pregunta correctamente, desea saber si el código de bytes producido por
javac
será "mejor" en Java 8 que en Java 7.La respuesta probablemente no sea, corrigen constantemente los errores en el compilador y eso a veces conduce a un código de bytes más eficiente. Pero no veré ninguna aceleración significativa de estas correcciones para Java 8 hasta donde puedo ver, el registro de cambios solo enumera 2 cambios principales entre versiones.
El sitio web de Oracle es terrible y parece que no puedo obtener una lista de correcciones de errores relacionadas
javac
entre versiones, pero aquí hay una no exhaustiva de OpenJDK . La mayoría de los que puedo encontrar son errores de reparación. Por lo tanto, al actualizar a Java 8, existe la posibilidad de que ya no se compile debido a quejavac
sigue más correctamente el JLS y habrá muy pocas o ninguna "mejora" en el código de bytes.fuente
El principal beneficio es que Java 8 tiene las últimas correcciones de errores, ya que Java 7 no se actualiza públicamente.
Además, si va a ejecutar código en una JVM Java 8, también puede tener instalada una sola versión de Java.
Java 8 podría ser más rápido y tiene mejor soporte para nuevas características como G1. Sin embargo, puede ser más lento para su caso de uso, por lo que la única forma de saberlo es probarlo.
Si está preguntando si hay algún beneficio en volver a compilar el código Java 7 en un compilador Java 8, la respuesta es; casi nada.
La única diferencia sutil es que ha habido diferencias menores en la API de Java, por lo que puede haber diferencias muy sutiles que el compilador de Java 8 puede encontrar que Java 7
Otras diferencias menores son el número mágico al comienzo del archivo, posiblemente el orden del grupo constante. El código de bytes es básicamente el mismo, incluso el soporte para el
invokedynamic
que se agregó lambdas existía en Java 7, pero simplemente no se usó de esa manera.fuente
Podría ayudar creando conciencia .
Cuando cambie a Java8, es posible que encuentre advertencias adicionales emitidas por javac. Ejemplo: la inferencia de tipos se ha mejorado enormemente con Java8. Y eso podría eliminar la necesidad de anotaciones @SuppressWarnings en su base de código actual (y cuando tales anotaciones ya no son necesarias, el compilador advierte sobre eso).
Entonces, incluso si no tiene la intención de modificar su base de código hoy, cambiar a Java8 podría informarle sobre tales cosas. Aumentar su conocimiento puede ayudarlo a tomar decisiones informadas.
Por otra parte:
En pocas palabras: hay algunas ventajas sutiles y ciertos riesgos (donde la importancia de los riesgos depende principalmente de su configuración general).
fuente
Lo haría por al menos estos hechos.
1) Elementos internos de HashMap (es más rápido bajo jdk-8)
2) Se corrigieron muchos errores que podrían ser transparentes para usted (optimizaciones de tiempo de ejecución) que harán que su código sea más rápido y mejor sin que realmente haga nada.
3) Recolector de basura G1
EDITAR
Desde un punto de vista técnico, esto suena más como algo relacionado con la compilación Ahead of Time o algo que un compilador podría mejorar analizando más el código. Hasta donde yo sé, esas cosas no se hacen en el compilador de Java 8.
Desde el punto de vista del desarrollador, hay muchos. El aumento de la productividad es lo más importante para mí.
EDITAR 2
Solo conozco dos puntos que coinciden con su segunda consulta:
para preservar los nombres de los parámetros del método.
Llamada Opción de perfil compacto para una huella más pequeña.
fuente
Si no tiene otras razones para recompilar su aplicación, probablemente no haga mucha diferencia, como se indica en la respuesta aceptada.
Sin embargo, si tiene que volver a compilarlo solo una vez, considere esto:
-source 7
con javac);-source 7
lugar de-source 8
si compila con un JDK 8 y su tiempo de ejecución de destino es Java 8;-source 8
garantías de que el desarrollador está utilizando Java 8 (o posterior) para la compilación y el tiempo de ejecución (como se aplica-target 8
).En conclusión, no lo vuelva a compilar si no lo necesita. Sin embargo, en la primera ocasión, debe volver a compilar (debido a cambios en el código), cambiar a Java 8. No corra el riesgo de tener un error debido a desajustes del entorno y no restrinja a los desarrolladores sin una buena razón.
fuente
-source 7
pero no compila-source 8
? Además, ¿podría indicar las contradicciones ya que su comentario no es muy constructivo como tal ...?