2009-09-25 14 views
6

to pytanie jest związane z drugim tematem omawianym tutaj:
Is Java bytecode compatible with different versions of Java?
ale w tym przypadku chciałbym wiedzieć, czy zachowana jest zgodność w tej samej wersji, ale na różnych zmianach.
Na przykład, czy kod bajtowy jest generowany przez kompilator w wersji 1.6.0_14 kompatybilnej z JVM w wersji 1.6.0? Kod działa szczęśliwie, ale nie wiem, czy jest jakaś kwestia, która może pojawić się nieoczekiwanie.Czy kod Java jest kompatybilny z bajtami w ramach różnych aktualizacji tej samej wersji Java?

Pozdrawiam.

Odpowiedz

7

Tak. Kod bajtowy zmienia tylko główne publikacje punktowe. Wydania aktualizacji (_XX) są oparte na narzędziach API & oparte na narzędziach, zwiększają wydajność i zmiany w niestandardowych przełącznikach poleceń. Aktualizacje nie łamią interfejsów API ani nie zmieniają wersji plików klas.

1) System numerów wersji systemu Bah dla Suns.

4

Tak powinno być binarnie kompatybilny, excepted for some corner case liste in this document.

+1

Lista wydaje się dotyczyć tylko problemów, które mogą występować w starszych wersjach (pre Java 6) w bieżącej maszynie JVM. –

+0

Jeśli przejdziesz do strony informacji o zgodności dla każdej poprzedniej wersji (1.4.0, 1.4.1, 1.4.2, itd ...), uzyskasz informacje o wszelkich możliwych niezgodnościach między mniejszymi wersjami (tj. 1.4.1 i 1.4. 2). – elhoim

+0

Jak rozumiem, drugorzędna wersja została teraz wycofana przez zespół marketingowy Suns. Masz teraz tylko wydanie aktualizacji (_XX) i wydania główne. Ale biorąc pod uwagę, że mówimy o systemie liczb Suns, prawdopodobnie zostanie to zmienione jutro. –

5

class file format ma numer wersji dokładnie w celu rozwiązania tej kwestii. Jeśli kiedykolwiek doszło do zerwania zmiany w tej samej wersji, spodziewam się, że liczba plików w formacie klasowym również wzrośnie (prawdopodobnie wersja minor_version, która do tej pory nie była używana), tym samym powodując, że starsze maszyny JVM natychmiast odrzucają pliki klas z UnsupportedClassVersionError

+0

Oznacza to, że nie będę tego wiedział, dopóki nie przetestuję/załaduję wszystkich klas w moim kodzie . –

+0

Zazwyczaj nie ma oddzielnych klas skompilowanych osobno przez inny kompilator. Domyślam się, że rzadko używany komponent w pliku JAR okazuje się mieć niekompatybilną wersję w najgorszym możliwym momencie, ale jest to raczej spreparowany scenariusz. –