6

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

13

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

5 ответ(ов)

2

Для проверки версии Java в вашей системе просто введите команду 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, которое указывает на то, что версия 32-битная.

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

0

При установке 32-битной JVM и повторной проверке я заметил, что следующая команда действительно показывает разрядность самой JVM, а не архитектуру операционной системы:

System.getProperty("os.arch");

На 64-битной системе Linux:

  • "x86" при использовании 32-битной JVM
  • "amd64" при использовании 64-битной JVM

Данный тест был проведён как на SUN, так и на IBM JVM (32- и 64-битных версиях). Очевидно, что свойство системы не просто отражает архитектуру операционной системы.

0

Если вы используете JNA, вы можете проверить, является ли com.sun.jna.Native.POINTER_SIZE == 4 (32-битная система) или com.sun.jna.Native.POINTER_SIZE == 8 (64-битная система).

0

На Linux вы можете получить информацию о заголовке ELF, используя одну из следующих команд:

file {ВАШ_ПУТЬ_К_JRE}/bin/java

Вывод: ELF 64-битный LSB исполняемый файл, AMD x86-64, версия 1 (SYSV), для GNU/Linux 2.4.0, динамически слинкованный (использует общие библиотеки), для GNU/Linux 2.4.0, не обфусцированный.

или

readelf -h {ВАШ_ПУТЬ_К_JRE}/bin/java | grep 'Class'

Вывод: Class: ELF64

0

Если вы используете JNA, вы можете сделать это следующим образом:

Platform.is64Bit()

Этот метод возвращает true, если ваша платформа — 64-битная, и false, если она 32-битная. Убедитесь, что у вас правильно подключен JNA в вашем проекте.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь