Вопрос или проблема
Мы генерируем сценарии для запуска Java на RHEL или Amazon Linux ami. Все сценарии теперь содержат опцию -d64
. Мы используем OpenJdk 1.8 64-битную версию. В вопросе FAQ Oracle Когда вы загружаете SDK или JRE, нужно ли вам выбирать между 32- и 64-битными версиями? указано, что эта опция доступна только на Linux по причинам совместимости. В нем говорится
Все остальные платформы (Windows и Linux) содержат отдельные 32- и 64-битные установочные пакеты. Если обе версии установлены в системе, вы можете выбрать одну из них, добавив соответствующий каталог “bin” в ваш путь. Для согласованности реализации Java на Linux принимают опцию -d64.
Таким образом, похоже, что -d64
не нужен для сценариев, работающих на Linux. Возможно, лучше добавлять эту опцию только при запуске на Solaris.
Это необходимо? Какой вред будет от удаления его из наших сценариев?
Если система 64-битная, вам не нужно указывать опцию -d64.
По моему опыту, вам нужна опция -d64, когда вы устанавливаете программное обеспечение, упакованное в jar-файл, например, Weblogic Generic, указывая, что вы хотите 64-битную версию программного обеспечения, поскольку она не знает о базовой системе и по умолчанию будет работать в 32-битной версии.
Ответ или решение
Вопрос о необходимости использования опции -d64
при запуске Java на Linux часто вызывает споры, особенно среди системных администраторов и разработчиков, работающих с различными дистрибутивами Linux, такими как Red Hat Enterprise Linux (RHEL) и Amazon Linux AMI. Давайте детально разберем, что означает использование этой опции, в каких случаях ее необходимо указывать и что произойдет, если вы решите удалить ее из своих скриптов.
Понимание опции -d64
Опция -d64
используется для указания, что Java Virtual Machine (JVM) должна запускаться в 64-битном режиме. Как упоминается в документации Oracle, эта опция предназначена в основном для совместимости и обеспечения однозначности работы на Linux-системах, где могут быть установлены как 32-битные, так и 64-битные версии Java.
Сценарий использования -d64
Если на вашем сервере установлена только 64-битная версия OpenJDK (как это указано в вашем вопросе с использованием OpenJDK 1.8 64-bit), то в большинстве случаев использование опции -d64
не является обязательным. Linux-системы, установившие 64-битную версию Java, автоматически распознают это при запуске без явной необходимости сообщать об этом через опцию.
Тем не менее, в сценариях, когда ваш скрипт может быть использован на многоархитектурных системах (например, в кластерах или контейнеризованных приложениях), или когда вы разрабатываете приложения, которые должны работать на разных системах и с различными версиями Java, рекомендуется сохранять -d64
. Это помогает избежать неопределенных состояний, когда система, возможно, пытается запустить 32-битную версию приложения по умолчанию.
Что произойдет, если убрать -d64
?
Если вы решите убрать опцию -d64
из ваших скриптов, и ваша система действительно работает на 64-битном JDK, то это не приведет к немедленным негативным последствиям. Однако, важно учитывать следующее:
-
Совместимость: Если в будущем вы решите использовать программы, которые могут быть упакованы как 32-битные или если ваши скрипты будут запущены на других системах с 32-битной версией Java, это может привести к непредсказуемому поведению.
-
Упрощение отладки: Наличие опции
-d64
в скриптах может облегчить отладку и поддержку, так как оно четко указывает, что ваше приложение должно использовать 64-битную архитектуру. -
Документация и стандарты: Внедрение единообразного стандарта для запуска Java-приложений, включая опции командной строки, способствует лучшей читаемости и пониманию кода среди разработчиков.
Заключение
В общем, опция -d64
не является строгой необходимостью для скриптов, работающих на 64-битной версии Java на Linux, но ее использование имеет смысл в контексте совместимости и лучшей практики. Рекомендуется принимать решение об оставлении или удалении этой опции с учетом архитектуры вашего приложения, настроек системы и возможных сценариев развертывания. Учитывая универсальность интерпретации Java на разных операционных системах, разумно поддерживать аккуратность и четкость в написании скриптов.