2009-09-25 8 views
6

questa domanda è correlata all'argomento trattato qui:
Is Java bytecode compatible with different versions of Java?
ma in questo caso vorrebbe sapere se la compatibilità viene mantenuta all'interno della stessa versione ma su aggiornamenti diversi.
Ad esempio, il bytecode generato dal compilatore sulla versione 1.6.0_14 è compatibile con JVM su 1.6.0? Il codice funziona felicemente, ma non so se c'è qualche problema che potrebbe sorgere inaspettatamente.Java bytecode compatibile con diversi aggiornamenti della stessa versione di Java?

Saluti.

risposta

7

Sì. Il codice byte cambia solo le versioni principali del punto¹. I rilasci dell'aggiornamento (_XX) sono API & correzioni di errori basati su strumenti, aumenti delle prestazioni e modifiche agli switch di comando non standard. Le versioni di aggiornamento non interromperanno le API né cambieranno le versioni dei file di classe.

1) Sistema di numero di versione di Bah for Suns.

4

Si dovrebbe essere compatibile a livello binario, excepted for some corner case liste in this document.

+1

L'elenco sembra riguardare solo i problemi che potrebbero verificarsi quando il codice byte precedente (pre-Java 6) è in esecuzione sulla JVM corrente. –

+0

Se vai sulla pagina delle informazioni di compatibilità per ogni versione precedente (1.4.0, 1.4.1, 1.4.2, ecc ...) ottieni informazioni su eventuali incompatibilità tra versioni minori (es: 1.4.1 && 1.4. 2). – elhoim

+0

Da quello che ho capito, la versione minore è stata eliminata dal team di marketing di Suns. Ora disponi della versione aggiornata (_XX) e delle sole versioni principali. Ma dato che stiamo parlando del sistema di numeri di Suns, questo probabilmente cambierà domani. –

5

Il class file format ha un numero di versione esattamente al fine di risolvere questo problema. Se ci fosse mai stato un cambiamento nella stessa versione, mi sarei aspettato che il numero del file di classe aumentasse (probabilmente la versione minore, che è stata finora inutilizzata), rendendo così le vecchie JVM rifiutare immediatamente i file di classe con uno

UnsupportedClassVersionError
+0

Ciò significa che non lo saprò fino a quando non testerò/caricherò tutte le classi nel mio codice . –

+0

In genere non si hanno classi singole compilate separatamente da un compilatore diverso. Immagino che potrebbe essere possibile avere un componente usato raramente in un file JAR e avere una versione incompatibile nel momento peggiore possibile, ma è uno scenario piuttosto inventato. –