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
e long
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.