Разные компиляторы Java (если поставщик отличается) создают разные байт-коды
Учитывая одну и ту же основную версию, скажем, Java 7, различные компиляторы Java (например, точка доступа Oracle, JRockit или IBM J9 и т. Д ...) компилируют данный файл исходного кода Java в один и тот же байт-код?
СканированиеСпецификация языка Java 7 Казалось бы, речь идет о семантике языка, а не о преобразовании кода в байт-код.
Этот вопрос не совпадает с тем, что разные версии major.minor для данного поставщика выдают один и тот же байт-код. На этот вопрос уже дан ответВот - сможет быть.
Из следующегоответ вЯвляется ли создание файлов классов Java детерминированным? и комментарий к этому ответу, который относится кэто вдоль стороны два ответа на вопрос Major.minor выше1 а также2Я понимаю, что ответ на мой вопросДА.
Выдержки для вышеупомянутого:
JLS оставляет много деталей реализации, чтобы варьироваться от одной реализации к другой.
а также
Однако JLS не определяет отображение 1: 1 из исходного кода в сгенерированный байт-код, поэтому не следует полагаться на тот же байт-код, который будет сгенерирован.
Еще комментарийВот подразумевает по-другому:
Это компилятор, то есть javac, создающий код с использованием BLAH BLAH BLAH. Это не имеет ничего общего с HotSpot.
Это подразумевает, что при наличии кода X все реализации javac (одна и та же версия / разные поставщики) должны создавать один и тот же байт-код Y.
Я не могу понять, как это так, но я не могу проверить, что это не так (или то, что я думаю, см. Выше), является правильным.
Можно ли дать окончательный ответ?