Como posso verificar o bitness do meu sistema operacional usando o Java? (J2SE, não os.arch)

Estou desenvolvendo um aplicativo de software que verifica o tipo de software que você instalou, mas, para isso, preciso saber se o sistema operacional é um sistema operacional de 32 bits ou 64 bits. Eu tentei System.getProperty (“os.arch”); mas então eu li que este comando só nos mostra a bit do JDK / JRE, não o próprio sistema operacional. Se você pudesse me dizer como saber se o sistema operacional está sendo usado (Windows 7, Mac OS, Ubuntu, etc …) isso seria simplesmente incrível C:

System.getProperty("os.arch"); 

Deve estar disponível em todas as plataformas, consulte o Tutorial de propriedades do sistema Java para obter mais informações.

Mas as plataformas Windows de 64 bits residirão na JVM se for uma JVM de 32 bits. Na verdade, o Windows de 64 bits residirá em qualquer processo de 32 bits sobre o ambiente para ajudar os programas antigos de 32 bits a funcionarem corretamente em um sistema operacional de 64 bits. Leia o artigo do MSDN sobre o WOW64 para mais informações.

Como resultado do WOW64, uma chamada de JVM de 32 bits System.getProperty("os.arch") retornará “x86”. Se você deseja obter a arquitetura real do SO subjacente no Windows, use a seguinte lógica:

 String arch = System.getenv("PROCESSOR_ARCHITECTURE"); String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432"); String realArch = arch != null && arch.endsWith("64") || wow64Arch != null && wow64Arch.endsWith("64") ? "64" : "32"; 

Veja também:

COMO: Detectar bitness de processo

Por que% processor_architecture% sempre retorna x86 em vez de AMD64

Detectar se a versão atual do Windows é 32 bits ou 64 bits

Não há como fazer isso sem obter uma plataforma específica. Dê uma olhada no último post desta página (a solução é específica da plataforma).

A propriedade os.name fornece o nome do sistema operacional usado, os.version a versão.

Você pode verificar ligando

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

Essa linha retorna 32 ou 64, que identifica se a JVM é de 32 ou 64 bits.