Será um processo de 32 bits precisa de mais memória quando ele é executado em um sistema de 64 bits?

StackOverflow https://stackoverflow.com/questions/1071029

Pergunta

Eu tenho um aplicativo java com fome em vez de memória. Em meus sistemas de 32 bits com o Windows XP Professional o aplicativo irá apenas correr bem se eu dar-lhe -Xmx1280m. Tudo abaixo vai acabar em uma exceção java.lang.OutOfMemoryError: Java heap space.

Se eu executar o mesmo aplicativo em um Windows XP Professional de 64 bits (tudo exatamente o mesmo) que exige -Xms1400m para prevenir a condição OutOfMemory.

Para meu entendimento, se eu tenho um programa C e eu compilá-lo para 32 bits e para 64 bits do Versão de 64 bits vai precisar de mais memória, porque os ponteiros são mais largos e assim por diante. No meu exemplo java no entanto a máquina virtual (Sun) é o mesmo e o bytecode é o mesmo.

Por que ele precisa de mais memória na máquina de 64 bits?

Foi útil?

Solução

Provavelmente porque o máquina virtual difere de implementação entre 32/64 bit arquitetura de tal forma que consome mais memória (tipos mais amplos, GC diferente).

O bytecode é irrelevante quando se passa nas tarefas para o sistema subjacente. Im não tem certeza que o Java e memória-eficiente são dois termos que eu iria colocar juntos de qualquer maneira: P

Outras dicas

Mesmo que seu bytecode é o mesmo, os convertidos JVM que para código de máquina, por isso tem todas as mesmas razões que C para exigir um consumo de memória maior.

É a mesma razão que você já listadas para o programa C. O sistema de 64 bits usa endereços de memória grandes, fazendo com que seja "leakier" (eu acredito que é o termo que eu ouvi usado para descrevê-lo).

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