update descargar actualizar java performance java-8

descargar - ¿Hay algún beneficio en actualizar el código compilado de Java 7 a Java 8?



java 8 update 161 (5)

Tengo una aplicación antigua escrita con Java 7. Funciona bien en Java 8 JRE. No planeo reescribir ninguno de los códigos para utilizar las funciones de Java 8. ¿Hay 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 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.


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 Java 8 JVM, 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.

¿Hay algún beneficio técnico al actualizar el código compilado al último Java 8 JDK?

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 byte es básicamente el mismo, incluso el soporte para invokedynamic que se agregó para lambdas existía en Java 7 pero simplemente no se usó de esa manera.


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:

–Parámetros

para preservar los nombres de los parámetros del método.

-perfil

Llamada Opción de perfil compacto para una huella más pequeña.


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 cuando no tenga 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:

  • Vi algunas preguntas aquí sobre situaciones (raras) en las que Java8 se negaba a compilar el código Java7. Por lo tanto, cambiar a Java8 también conlleva un riesgo (mínimo) de encontrarse con ese tipo de problema.
  • Y: incluso si no tiene la intención de tocar su base de código hoy , existe una cierta posibilidad de que cambie de opinión más adelante. Y luego, cuando no prestas atención, puedes explotar las características de Java8. Lo que podría complicar las "actualizaciones de campo"; ¡ya que tiene dos versiones de su código fuente para mantener!
  • Luego: en caso de que haya clientes que ejecuten el producto utilizando un java7 jre; tienes que tener mucho cuidado con las correcciones binarias que les das. Tenemos tal configuración; y he perdido el tiempo más de una vez porque accidentalmente puse una sola clase compilada en Java8 en un sistema de prueba controlado por Java7. Eso simplemente no puede suceder cuando su configuración de desarrollo y prueba / cliente es todo Java7.

En pocas palabras: hay algunas ventajas sutiles y ciertos riesgos (donde la importancia de los riesgos depende principalmente de su configuración general).


Si entiendo la pregunta correctamente, desea saber si el código de javac 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 por lo que puedo ver, no verá ninguna aceleración significativa de estas correcciones para Java 8, el changelog 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 con 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 que javac sigue más correctamente el JLS y habrá muy pocas o ninguna "mejora" en el código de bytes.


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:

  • El código fuente de su aplicación es compatible con Java 7, y muy probablemente también con 8;
  • En el caso de que el código no se compile con Java 8, probablemente tampoco se compilará con un compilador Java 8 en modo de compatibilidad de fuente Java 7 ( -source 7 con javac);
  • Sus desarrolladores y CI necesitarán ejecutar pruebas de unidad e integración contra un tiempo de ejecución de Java 8 para estar lo más cerca posible del entorno de producción. Los desarrolladores también deberán ejecutar la aplicación en el mismo tiempo de ejecución de Java 8 cuando la ejecuten localmente;
  • Es más difícil compilar con un JDK 7 y ejecutar con un JRE 8 (en el mismo proceso de compilación o en el mismo IDE) que hacer todo con la misma versión;
  • No es beneficioso usar -source 7 lugar de -source 8 si compila con un JDK 8 y su tiempo de ejecución de destino es Java 8;
  • El uso de -source 8 garantiza que el desarrollador esté utilizando Java 8 (o posterior) tanto para la compilación como para el tiempo de ejecución (ya que 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 en el entorno y no restrinja a los desarrolladores sin una buena razón.