Oui à la première question et non à la deuxième question; c'est une machine virtuelle. Vos problèmes sont probablement liés à des changements non spécifiés dans l'implémentation de la bibliothèque entre les versions. Bien que cela puisse être, par exemple, une condition de course.
Il y a des obstacles que la VM doit franchir. Notamment, les références sont traitées dans les fichiers de classe comme si elles occupaient le même espace que int
s sur la pile. double
et long
occupez deux emplacements de référence. Par exemple, les champs, il y a de toute façon un réarrangement de la VM. Tout cela est fait (relativement) de manière transparente.
Certaines JVM 64 bits utilisent également des "oops compressés". Parce que les données sont alignées à environ tous les 8 ou 16 octets, trois ou quatre bits de l'adresse sont inutiles (bien qu'un bit de «marque» puisse être volé pour certains algorithmes). Cela permet aux données d'adresse 32 bits (utilisant donc deux fois moins de bande passante, et donc plus rapide) d'utiliser des tailles de tas de 35 ou 36 bits sur une plate-forme 64 bits.