En general, tengo que decir que no hay garantía de que la misma fuente produzca el mismo código de bytes cuando la compila el mismo compilador pero en una plataforma diferente.
Buscaría escenarios que involucren diferentes idiomas (páginas de códigos), por ejemplo, Windows con soporte para el idioma japonés. Piense en caracteres de varios bytes; a menos que el compilador siempre asuma que necesita admitir todos los lenguajes que podría optimizar para ASCII de 8 bits.
En el marco de la compatibilidad binaria versión a versión en SOM (Forman, Conner, Danforth y Raper, Proceedings of OOPSLA '95), los binarios del lenguaje de programación Java son compatibles con todas las transformaciones relevantes que los autores identifican (con algunas salvedades con respecto a la adición de variables de instancia). Usando su esquema, aquí hay una lista de algunos cambios compatibles binarios importantes que admite el lenguaje de programación Java:
• Reimplementar métodos, constructores e inicializadores existentes para mejorar el rendimiento.
• Cambiar métodos o constructores para devolver valores en entradas para las que previamente arrojaron excepciones que normalmente no deberían ocurrir o fallaron al entrar en un bucle infinito o causar un punto muerto.
• Agregar nuevos campos, métodos o constructores a una clase o interfaz existente.
• Eliminar campos privados, métodos o constructores de una clase.
• Cuando se actualiza un paquete completo, se eliminan los campos de acceso, métodos o constructores de clases e interfaces predeterminados (solo paquetes) en el paquete.
• Reordenar los campos, métodos o constructores en una declaración de tipo existente.
• Mover un método hacia arriba en la jerarquía de clases.
• Reordenar la lista de superinterfaces directas de una clase o interfaz.
• Insertar nuevos tipos de clase o interfaz en la jerarquía de tipos.
Este capítulo especifica los estándares mínimos para la compatibilidad binaria garantizada por todas las implementaciones. El lenguaje de programación Java garantiza la compatibilidad cuando se mezclan binarios de clases e interfaces que no se sabe que provienen de fuentes compatibles, pero cuyas fuentes se han modificado de las formas compatibles descritas aquí. Tenga en cuenta que estamos discutiendo la compatibilidad entre versiones de una aplicación. Una discusión sobre la compatibilidad entre las versiones de la plataforma Java SE está fuera del alcance de este capítulo.