В целом, я должен сказать, что нет никакой гарантии, что один и тот же источник будет генерировать один и тот же байт-код при компиляции одним и тем же компилятором, но на другой платформе.
Я бы рассмотрел сценарии с использованием разных языков (кодовых страниц), например Windows с поддержкой японского языка. Подумайте о многобайтовых символах; если компилятор не всегда предполагает, что ему необходимо поддерживать все языки, которые он может оптимизировать для 8-битного ASCII.
В Спецификации языка Java есть раздел о двоичной совместимости .
В рамках бинарной совместимости от выпуска к выпуску в SOM (Forman, Conner, Danforth и Raper, Proceedings of OOPSLA '95) двоичные файлы языка программирования Java являются двоично совместимыми при всех соответствующих преобразованиях, которые указывают авторы (с некоторыми оговорками в отношении относительно добавления переменных экземпляра). Используя их схему, вот список некоторых важных двоичных совместимых изменений, которые поддерживает язык программирования Java:
• Повторная реализация существующих методов, конструкторов и инициализаторов для повышения производительности.
• Изменение методов или конструкторов так, чтобы они возвращали значения на входах, для которых они ранее либо вызывали исключения, которые обычно не должны происходить, либо завершались ошибкой из-за перехода в бесконечный цикл или возникновения тупиковой ситуации.
• Добавление новых полей, методов или конструкторов в существующий класс или интерфейс.
• Удаление частных полей, методов или конструкторов класса.
• При обновлении всего пакета удаление полей доступа по умолчанию (только для пакета), методов или конструкторов классов и интерфейсов в пакете.
• Изменение порядка полей, методов или конструкторов в существующем объявлении типа.
• Перемещение метода вверх по иерархии классов.
• Изменение порядка в списке прямых суперинтерфейсов класса или интерфейса.
• Вставка новых типов классов или интерфейсов в иерархию типов.
В этой главе указаны минимальные стандарты двоичной совместимости, гарантированные всеми реализациями. Язык программирования Java гарантирует совместимость, когда смешиваются двоичные файлы классов и интерфейсов, которые, как известно, не получены из совместимых источников, но источники которых были изменены совместимыми способами, описанными здесь. Обратите внимание, что мы обсуждаем совместимость между выпусками приложения. Обсуждение совместимости выпусков платформы Java SE выходит за рамки этой главы.