Sí a la primera pregunta y no a la segunda pregunta; es una máquina virtual. Sus problemas probablemente estén relacionados con cambios no especificados en la implementación de la biblioteca entre versiones. Aunque podría ser, digamos, una condición de carrera.
Hay algunos obstáculos por los que tiene que pasar la VM. En particular, las referencias se tratan en los archivos de clases como si ocuparan el mismo espacio que int
s en la pila. double
y long
ocupa dos espacios de referencia. Por ejemplo, en los campos, hay una reordenación por la que normalmente pasa la VM de todos modos. Todo esto se hace (relativamente) de forma transparente.
Además, algunas JVM de 64 bits utilizan "oops comprimidos". Debido a que los datos se alinean aproximadamente cada 8 o 16 bytes, tres o cuatro bits de la dirección son inútiles (aunque se puede robar un bit de "marca" para algunos algoritmos). Esto permite que los datos de direcciones de 32 bits (por lo tanto, usan la mitad de ancho de banda y, por lo tanto, más rápido) utilicen tamaños de pila de 35 o 36 bits en una plataforma de 64 bits.