Влияние смены поставщика JVM на ваше приложение

Если вы хотите изменить JVM (только поставщика и придерживаться той же версии JAVA) для своего приложения, какие аспекты следует проверить, чтобы убедиться, что ваше приложение будет работать оптимально.

Различия между этими JVM, которые будут иметь очевидное влияние на производительность и обслуживание вашего приложения, заключаются в следующем:

  • Алгоритмы управления памятью и сборки мусора
  • Патчи безопасности и стабильности

Итак, можно ли предположить, что если результаты тестов производительности вашего приложения хорошие и если поддержка исправлений безопасности и стабильности от поставщика приемлема, вы можете продолжить внесение изменений.

Я предполагаю, что переключение JVM не окажет никакого функционального влияния, а повлияет только на производительность вашего приложения.


person Kapil Raju    schedule 13.05.2017    source источник


Ответы (1)


Есть разница между 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
comment
Изменение JVM не требует перекомпиляции исходного кода Java. Java имеет очень строгие спецификации, и каждая совместимая JVM должна иметь возможность запускать файлы .class, скомпилированные любой другой JVM. - person Dan Heidinga; 08.06.2017