Pergunta

Como a JVM lida com um "longo" primitivo, que é 64 bits, em um processador de 32 bits?


Pode utilizar núcleos mulitple em paralelo quando em uma máquina de 32 bits com vários núcleos?
Quanto mais lentas existem operações de 64 bits em uma máquina de 32 bits?

Foi útil?

Solução

Ele pode usar vários núcleos para executar encadeamentos diferentes, mas não os usa em paralelo para cálculos de 64 bits. Um comprimento de 64 bits é basicamente armazenado como duas INTs de 32 bits. Para adicioná -los, são necessárias duas adições, acompanhando o bit de transporte. A multiplicação é como multiplicar dois números de dois dígitos, exceto que cada dígito está na base 2^32 em vez da base 10. Portanto, para outras operações aritméticas.

Editar sobre a velocidade: só posso adivinhar a diferença de velocidade. Uma adição requer dois adicionados em vez de um, e uma multiplicação (eu acho) exigiria quatro multiplicações em vez de um. No entanto, suspeito que, se tudo puder ser mantido em registros, o tempo real para o cálculo seria diminuído pelo tempo necessário para ir à memória duas vezes para a leitura e duas vezes para a gravação, então meu palpite é duas vezes o tempo para a maioria operações. Eu imagino que isso dependeria do processador, da implementação de JVM específica, da fase da lua etc., a menos que você esteja fazendo um grande número de números, eu não me preocuparia com isso. A maioria dos programas gasta a maior parte do tempo aguardando o IO de/do disco ou rede.

Outras dicas

A partir de Talkingtree, e as FAQ Java Hotspot:

Geralmente, os benefícios de poder abordar quantidades maiores de memória vêm com uma pequena perda de desempenho em VMs de 64 bits versus executando o mesmo aplicativo em uma VM de 32 bits. Isso se deve ao fato de que todo ponteiro nativo do sistema ocupa 8 bytes em vez de 4. O carregamento desses dados extras tem um impacto no uso da memória, o que se traduz em execução um pouco mais lenta, dependendo de quantos ponteiros são carregados durante a execução de Seu programa Java.
A boa notícia é que, com as plataformas AMD64 e EM64T em modo de 64 bits, a VM Java obtém alguns registros adicionais que podem usar para gerar sequências de instruções nativas mais eficientes. Esses registros extras aumentam o desempenho ao ponto em que geralmente não há perda de desempenho ao comparar a velocidade de execução de 32 a 64 bits.

A diferença de desempenho comparando um aplicativo em execução em uma plataforma de 64 bits versus uma plataforma de 32 bits no SPARC está na ordem de degradação de 10 a 20% quando você se move para uma VM de 64 bits. Nas plataformas AMD64 e EM64T, essa diferença varia de 0 a 15%, dependendo da quantidade de ponteiro que acessa o seu aplicativo executa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top