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 с помощью:
При написании кода 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 операционной системы.