Есть разница между JVM и Java (и неявно javac компилятором).
Когда вы говорите изменить vendor, вы, вероятно, имеете в виду и то, и другое: перекомпилировать файлы .java с новым компилятором и запустить эти сгенерированные файлы .class на новом поставщике jvm.
В этом случае bytecode может отличаться (содержимое файла .class). Вообще вас это не волнует, потому что ваш код по-прежнему работает нормально. Но хорошо знать, что это может измениться, и вы не можете полагаться на это.
Насколько я могу судить, проблема с другим jvm намного больше. Каждый поставщик может оптимизировать его по-своему, и это может сильно отличаться. Например, ваш текущий jvm может встраивать методы после 2000 вызовов, а ваш новый jvm может делать это после 10000 вызовов. Поэтому JIT может отличаться. Он может использовать другую реализацию сборщика мусора и даже может нарезать вашу память иначе, чем Oracle Hotspot, поэтому куча может отличаться.
Возможно, сейчас у вас включены параметры настройки (-XX:SomeProp), которые просто не будут поняты вашим новым поставщиком. Инструменты, предоставляемые для решения проблем с отладкой, также могут различаться: следует следить за инструментами и свойствами запуска.
Тогда есть ошибки. Даже если все компиляторы должны соответствовать jls, все они имеют ошибки (это все еще программное обеспечение), и хотя некоторые вещи сейчас нормально компилируются/запускаются, они могут внезапно сломаться из-за внесенных вами изменений.
Я не знаю, есть ли безопасный способ изменить это. Потому что это зависит от того, что вы на самом деле определяете как безопасное. Если все, о чем вы заботитесь, это то, что код работает, а также тесты и тесты производительности в порядке, тогда все в порядке.
И последнее замечание: мы участвовали в таком переезде с J9 на Oracle Hotspot. Смена далась нелегко, в основном из-за J9 AOT Compiler, heap memory j9 != oracle, different GC (это было довольно давно и повторять эту историю не хочется).
person
Eugene
schedule
14.05.2017