Ой, я не знаю, я никогда несу чушь записанный код, который вызывает Переполнение стека;)
Обратите внимание, что имущество os.arch
даст вам архитектуру JRE , а не основной ОС.
Если вы устанавливаете 32-битный JRE на 64-битной системе, System.getProperty («os.arch»)
вернутся x86
, чтобы фактически определить основную архитектуру, Вам нужно будет написать какой-то родной код. Смотри Это пост для получения дополнительной информации (и ссылка на нативный код образца)
Вы можете использовать свойство os.arch в свойствах системы, чтобы узнать.
Properties pr = System.getProperties();
System.out.println(pr.getProperty("os.arch"));
Если вы используете 32-битную версию, она должна показать i386 или что-то в этом роде
Я не совсем доверяю чтению системной переменной os.arch. Хотя это работает, если пользователь запускает 64-битную JVM в 64-битной системе. Это не работает, если пользователь запускает 32-битную JVM в 64-битной системе.
Следующий код работает для правильного определения 64-разрядных операционных систем Windows. В 64-битной системе Windows будет установлена переменная среды "Programfiles (x86)". Он НЕ будет установлен в 32-битной системе, и java будет читать его как null.
boolean is64bit = false;
if (System.getProperty("os.name").contains("Windows")) {
is64bit = (System.getenv("ProgramFiles(x86)") != null);
} else {
is64bit = (System.getProperty("os.arch").indexOf("64") != -1);
}
Для других операционных систем, таких как Linux, Solaris или Mac, мы также можем столкнуться с этой проблемой. Так что это не полное решение. Для Mac вы, вероятно, в безопасности, потому что Apple блокирует JVM в соответствии с ОС. Но Linux, Solaris и т. Д. Они все еще могут использовать 32-битную JVM в своей 64-битной системе. Так что используйте это с осторожностью.