O código Java construído e compilado em um JDK de 32 bits em código de bytes de 32 bits funcionará em uma JVM de 64 bits? Ou uma JVM de 64 bits requer código de bytes de 64 bits?
Para dar mais detalhes, tenho um código que estava funcionando em um ambiente Solaris executando uma JVM de 32 bits, mas agora estou tendo problemas após atualizar o JDK e o Weblogic Server para 64 bits.
Respostas:
Sim, o bytecode Java (e código-fonte) é independente da plataforma, supondo que você use bibliotecas independentes da plataforma. 32 x 64 bits não devem importar.
fonte
javac
aproveitará a memória disponibilizada com 64 bitsjava
?Eu acidentalmente executei nosso aplicativo (grande) em uma VM de 64 bits em vez de uma VM de 32 bits e não percebi até que algumas bibliotecas externas (chamadas por JNI) começaram a falhar.
Os dados serializados em uma plataforma de 32 bits foram lidos na plataforma de 64 bits sem nenhum problema.
Que tipo de problemas você está tendo? Algumas coisas funcionam e outras não? Você já tentou anexar JConsole etc e tem um pico ao redor?
Se você tiver uma VM muito grande, poderá descobrir que os problemas de GC em 64 bits podem afetá-lo.
fonte
Sim para a primeira pergunta e não para a segunda pergunta; é uma máquina virtual. Seus problemas provavelmente estão relacionados a mudanças não especificadas na implementação da biblioteca entre as versões. Embora possa ser, digamos, uma condição de corrida.
Existem alguns obstáculos pelos quais a VM deve passar. Notavelmente, as referências são tratadas em arquivos de classe como se ocupassem o mesmo espaço que
int
s na pilha.double
elong
ocupar dois slots de referência. Por exemplo, campos, há alguns rearranjos pelos quais a VM geralmente passa de qualquer maneira. Tudo isso é feito (relativamente) de forma transparente.Além disso, alguns JVMs de 64 bits usam "ops compactados". Como os dados são alinhados a cada 8 ou 16 bytes, três ou quatro bits do endereço são inúteis (embora um bit de "marca" possa ser roubado para alguns algoritmos). Isso permite que os dados de endereço de 32 bits (portanto, usando a metade da largura de banda e, portanto, mais rápido) usem tamanhos de heap de 35 ou 36 bits em uma plataforma de 64 bits.
fonte
Todo o código de byte é baseado em 8 bits. (É por isso que é chamado de código BYTE) Todas as instruções são múltiplos de 8 bits de tamanho. Desenvolvemos em máquinas de 32 bits e executamos nossos servidores com JVM de 64 bits.
Você poderia dar alguns detalhes do problema que está enfrentando? Então, podemos ter a chance de ajudá-lo. Caso contrário, estaríamos apenas adivinhando qual é o problema que você está tendo.
fonte
A menos que você tenha código nativo (código de máquina compilado para uma arquitetura específica), seu código será executado igualmente bem em uma JVM de 32 bits e 64 bits.
Observe, entretanto, que devido aos endereços maiores (32 bits são 4 bytes, 64 bits são 8 bytes), uma JVM de 64 bits exigirá mais memória do que uma JVM de 32 bits para a mesma tarefa.
fonte
A diferença de 32 bits versus 64 bits se torna mais importante quando você faz interface com bibliotecas nativas. Java de 64 bits não será capaz de fazer interface com uma DLL não Java de 32 bits (via JNI)
fonte
Adicione um parâmetro como abaixo em você na configuração ao criar o exe
http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/
Espero que ajude.
obrigado...
/ jav
fonte
O Java JNI requer bibliotecas do sistema operacional da mesma "bittiness" que o JVM. Se você tentar construir algo que dependa, por exemplo, de IESHIMS.DLL (reside em% ProgramFiles% \ Internet Explorer), você precisará obter a versão de 32 bits quando sua JVM é de 32 bits, a versão de 64 bits quando sua JVM é de 64 bits. Da mesma forma para outras plataformas.
Além disso, você deve estar pronto. O bytecode Java gerado s / b é o mesmo.
Observe que você deve usar o compilador Java de 64 bits para projetos maiores porque ele pode endereçar mais memória.
fonte
yo onde errado! Para este tema escrevi uma pergunta ao oracle. A resposta foi.
"Se você compilar seu código em uma máquina de 32 bits, ele só deve ser executado em um processador de 32 bits. Se quiser executar seu código em uma JVM de 64 bits, você deve compilar seus arquivos de classe em uma máquina de 64 bits usando uma máquina de 64 -Bit JDK. "
fonte