Вопрос-ответ

How can I tell if I'm running in 64-bit JVM or 32-bit JVM (from within a program)?

Как я могу определить, работаю ли я в 64-разрядной JVM или 32-разрядной JVM (из программы)?

Как я могу определить, является ли JVM, в которой выполняется мое приложение, 32-разрядной или 64-разрядной? В частности, какие функции или свойства я могу использовать для обнаружения этого в программе?

Переведено автоматически
Ответ 1

Для определенных версий Java вы можете проверить разрядность JVM из командной строки с помощью флагов -d32 и -d64.

$ java -help
...
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available

Чтобы проверить наличие 64-разрядной JVM, запустите:

$ java -d64 -version

Если это не 64-разрядная JVM, вы получите следующее:

Error: This Java instance does not support a 64-bit JVM.
Please install the desired version.

Аналогично, чтобы проверить наличие 32-разрядной JVM, запустите:

$ java -d32 -version

Если это не 32-разрядная JVM, вы получите следующее:

Error: This Java instance does not support a 32-bit JVM.
Please install the desired version.

Эти флаги были добавлены в Java 7, устарели в Java 9, удалены в Java 10 и больше не доступны в современных версиях Java.

Ответ 2

Вы извлекаете системное свойство, которое отмечает разрядность этой JVM с помощью:

System.getProperty("sun.arch.data.model");

Возможные результаты:


  • "32" – 32-разрядная JVM

  • "64" – 64-разрядная JVM

  • "unknown" – Неизвестная JVM

Как описано в часто задаваемых вопросах о HotSpot:


При написании кода Java, как мне отличить 32-разрядную операцию от 64-разрядной?


Нет общедоступного API, который позволял бы вам различать 32-разрядную и 64-разрядную операции. Думайте о 64-разрядной как о еще одной платформе в традиции write once, run anywhere . Однако, если вы хотите написать код, зависящий от платформы (позор вам), системное свойство sun.arch.data.model имеет значение "32", "64" или "неизвестно".


Пример, когда это может быть необходимо, - это если ваш Java-код зависит от собственных библиотек, и вам нужно определить, загружать ли 32- или 64-разрядную версию библиотек при запуске.

Ответ 3

Просто введите java -version в своей консоли.

Если запущена 64-разрядная версия, вы получите сообщение типа:

java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

32-разрядная версия покажет что-то похожее на:

java version "1.6.0_41"
Java(TM) SE Runtime Environment (build 1.6.0_41-b02)
Java HotSpot(TM) Client VM (build 20.14-b01, mixed mode, sharing)

Обратите внимание на Client вместо 64-Bit Server в третьей строке. Client/Server Часть не имеет значения, важно отсутствие 64-Bit.

Если в вашей системе установлено несколько версий Java, перейдите в папку / bin версии Java, которую вы хотите проверить, и введите java -version там.

Ответ 4

Я установил 32-разрядную JVM и повторил ее снова, похоже, что следующее говорит вам о разрядности JVM, а не об arch ОС:

System.getProperty("os.arch");
#
# on a 64-bit Linux box:
# "x86" when using 32-bit JVM
# "amd64" when using 64-bit JVM

Это было протестировано как на SUN, так и на IBM JVM (32 и 64-разрядные). Очевидно, что системное свойство - это не просто arch операционной системы.

java jvm