java - the - Como posso saber se estou executando na JVM de 64 bits ou na JVM de 32 bits(de dentro de um programa)?




virtual machine minecraft (8)

A Sun possui uma propriedade do Sistema Java para determinar o bitness da JVM: 32 ou 64:

sun.arch.data.model=32 // 32 bit JVM
sun.arch.data.model=64 // 64 bit JVM

Você pode usar

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

para determinar se o seu 32/64 do programa.

Das Perguntas Frequentes do Sun HotSpot :

Ao escrever código Java, como distinguir entre operações de 32 e 64 bits?

Não há uma API pública que permita distinguir entre operações de 32 e 64 bits. Pense em 64 bits como apenas outra plataforma na tradição de escrever uma vez, executar em qualquer lugar. No entanto, se você quiser escrever um código que seja específico da plataforma (vergonha para você), a propriedade do sistema sun.arch.data.model tem o valor "32", "64" ou "unknown".

A única boa razão é se o seu código java é dependente de bibliotecas nativas e seu código precisa determinar qual versão (32 ou 64 bits) deve ser carregada na inicialização.

Como posso saber se a JVM em que meu aplicativo é executado é 32 bits ou 64 bits? Especificamente, qual função ou preferência eu acesso para detectar isso dentro do programa?


Basta digitar java -version no seu console.

Se uma versão de 64 bits estiver em execução, você receberá uma mensagem como:

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)

Uma versão de 32 bits mostrará algo semelhante a:

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)

Observe o Client vez do 64-Bit Server de 64-Bit Server na terceira linha. A parte Client/Server é irrelevante, é a ausência do 64-Bit que importa.

Se várias versões do Java estiverem instaladas em seu sistema, navegue até a pasta / bin da versão do Java que você deseja verificar e digite java -version lá.


No Linux, você pode obter informações do cabeçalho ELF usando um dos dois comandos a seguir:

file {YOUR_JRE_LOCATION_HERE}/bin/java

o / p: executável LSB de 64 bits ELF, AMD x86-64, versão 1 (SYSV), para GNU / Linux 2.4.0, vinculado dinamicamente (usa bibliotecas compartilhadas), para GNU / Linux 2.4.0, não despojado

ou

readelf -h {YOUR_JRE_LOCATION_HERE}/bin/java | grep 'Class'

o / p: Classe: ELF 64


No Windows 7, no " Painel de Controle ", em " Programas | Programas e Recursos ", as variantes de 64 bits do JRE e JDK estão listadas com " 64 bits " entre parênteses (por exemplo, " Java SE Development Kit 7 Atualização 65 (64 bits). ) "), enquanto para as variantes de 32 bits a variante não é mencionada entre parênteses (por exemplo, apenas" Java SE Development Kit 8 Update 60 ").


Para obter a versão da JVM atualmente executando o programa

System.out.println(Runtime.class.getPackage().getImplementationVersion());

Se você estiver usando o JNA, poderá verificar se com.sun.jna.Native.POINTER_SIZE == 4 (32 bit) ou com.sun.jna.Native.POINTER_SIZE == 8 (64 bit).


Você pode tentar na linha de comando:

java -d64 -version

Se não for uma versão de 64 bits, você receberá uma mensagem semelhante a:

Esta instância Java não suporta uma JVM de 64 bits. Por favor, instale a versão desejada.

Consulte as opções de ajuda da JVM para mais informações sobre java -help


Atualizar novamente :

Eu instalei a JVM de 32 bits e tentei novamente, parece que o seguinte não informa a bit JVM, não o arco do SO:

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

Isso foi testado no SUN e no IBM JVM (32 e 64 bits). Claramente, a propriedade do sistema não é apenas o arco do sistema operacional.







32-bit