2009-09-25 15 views
6

esta pregunta está relacionada con el otro tema tratado aquí:
Is Java bytecode compatible with different versions of Java?
pero en este caso me gustaría saber si la compatibilidad se conserva dentro de la misma versión pero en diferentes actualizaciones.
Por ejemplo, ¿el bytecode generado por el compilador en la versión 1.6.0_14 es compatible con JVM en 1.6.0? El código funciona felizmente, pero no sé si hay algún problema que pueda surgir inesperadamente.¿Es compatible el bytecode de Java con diferentes actualizaciones de la misma versión de Java?

Atentamente.

Respuesta

7

Sí. El código de bytes solo cambia los lanzamientos de puntos principales. Las versiones de actualización (_XX) son correcciones de errores basadas en API &, el rendimiento aumenta y los cambios en los conmutadores de comando no estándar. Las versiones de actualización no romperán las API ni cambiarán las versiones de los archivos de clase.

1) Bah para el sistema de número de versión Suns.

4

Sí debe ser compatible a nivel binario, excepted for some corner case liste in this document.

+1

La lista parece referirse solo a los problemas que el código de byte anterior (pre Java 6) puede tener cuando se ejecuta en la JVM actual. –

+0

Si va a la página de información de compatibilidad para cada versión anterior (1.4.0, 1.4.1, 1.4.2, etc.), obtiene información sobre cualquier posible incompatibilidad entre versiones menores (es decir: 1.4.1 y & 1.4. 2). – elhoim

+0

Según tengo entendido, el equipo de marketing de Suns ha eliminado gradualmente esta versión secundaria. Ahora tiene la versión de actualización (_XX) y solo lanzamientos de puntos principales. Pero dado que estamos hablando del sistema de números de Suns, es probable que esto cambie mañana. –

5

El class file format tiene un número de versión exactamente con el fin de resolver esta cuestión. Si alguna vez hubo un cambio en la misma versión, esperaría que el número de formato de archivo de clase también aumentara (posiblemente la versión_menor, que hasta ahora no se usó), haciendo que las JVM antiguas rechacen los archivos de clase inmediatamente con un UnsupportedClassVersionError

+0

Esto significa que no sabré hasta que pruebe/cargue todas las clases en mi código . –

+0

Normalmente no tiene clases individuales compiladas por separado por un compilador diferente. Supongo que podría ser posible que un componente poco utilizado en un archivo JAR resulte tener una versión incompatible en el peor momento posible, pero es un escenario bastante artificial. –

Cuestiones relacionadas