2009-09-25 16 views
6

cette question est liée à l'autre sujet discuté ici:
Is Java bytecode compatible with different versions of Java?
mais dans ce cas, nous aimerions savoir si la compatibilité est préservée dans la même version mais sur différentes mises à jour.
Par exemple, le bytecode est-il généré par le compilateur sur la version 1.6.0_14 compatible avec JVM sur 1.6.0? Le code fonctionne bien, mais je ne sais pas s'il y a un problème qui pourrait surgir de façon inattendue.Le bytecode Java est-il compatible avec différentes mises à jour de la même version de Java?

Cordialement.

Répondre

7

Oui. Le code d'octet ne modifie que les versions majeures du point¹. Les versions de mise à jour (_XX) sont des correctifs de bogues basés sur les outils, des augmentations de performances et des modifications apportées aux commutateurs de commande non standard (API &). Les mises à jour ne casseront pas les API ou ne changeront pas les versions du fichier de classe.

1) Système de numéro de version Bah for Suns.

4

Oui, il devrait être compatible au niveau binaire, excepted for some corner case liste in this document.

+1

La liste semble ne concerner que les problèmes que l'ancien code (pré Java 6) peut avoir lors de l'exécution de la JVM en cours. –

+0

Si vous allez sur la page d'informations de compatibilité pour chaque version précédente (1.4.0, 1.4.1, 1.4.2, etc ...) vous obtenez des informations sur d'éventuelles incompatibilités entre les versions mineures (à savoir: 1.4.1 && 1.4. 2). – elhoim

+0

Si j'ai bien compris, la version mineure a maintenant été éliminée par l'équipe marketing de Suns. Vous disposez maintenant de la version de mise à jour (_XX) et des principales versions de points uniquement. Mais étant donné que nous parlons du système de nombre de Suns cela sera probablement changé demain. –

5

Le class file format a un numéro de version exactement afin de résoudre cette question. Si jamais il y avait un changement de rupture dans la même version, je m'attendrais à ce que le numéro de format de fichier augmente aussi (peut-être la version mineure, qui a été inutilisée), ce qui fait que les anciennes JVM rejettent immédiatement les fichiers UnsupportedClassVersionError

+0

Cela signifie que je ne le saurai pas avant de tester/charger toutes les classes de mon code . –

+0

Vous n'avez généralement pas de classes individuelles compilées séparément par un compilateur différent. Je suppose qu'il peut être possible d'avoir un composant rarement utilisé dans un fichier JAR pour avoir une version incompatible au pire moment possible, mais c'est un scénario plutôt artificiel. –