Java: comment la machine virtuelle gère-t-elle un `long` 64 bits sur un processeur 32 bits

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

  •  04-07-2019
  •  | 
  •  

Question

Comment la machine virtuelle Java gère-t-elle une primitive "longue", soit 64 bits, sur un processeur 32 bits?


Peut-il utiliser plusieurs cœurs en parallèle sur une machine 32 bits multicœurs?
Quelle est la lenteur des opérations 64 bits sur une machine 32 bits?

Était-ce utile?

La solution

Il peut utiliser plusieurs cœurs pour exécuter différents threads, mais il ne les utilise pas en parallèle pour les calculs 64 bits. Une longueur de 64 bits est essentiellement stockée en tant que deux ints de 32 bits. Afin de les ajouter, deux ajouts sont nécessaires, en gardant une trace du bit de retenue. La multiplication est un peu comme si on multipliait deux nombres à deux chiffres, sauf que chaque chiffre est en base 2 ^ 32 au lieu de base 10. Donc, pour d’autres opérations arithmétiques.

Modifiez la vitesse: je ne peux que deviner la différence de vitesse. Un ajout nécessite deux ajouts au lieu d'un, et une multiplication nécessiterait (je pense) quatre multiplications au lieu d'un. Cependant, je soupçonne que si tout peut être conservé dans des registres, le temps réel nécessaire pour le calcul sera plus petit que le temps nécessaire pour aller en mémoire deux fois pour la lecture et deux fois pour l’écriture; opérations. J'imagine que cela dépend du processeur, de l'implémentation de la machine virtuelle Java, de la phase de la lune, etc. Si vous ne faites pas de gros calculs, je ne m'inquiéterais pas. La plupart des programmes passent le plus clair de leur temps à attendre les E / S du disque ou du réseau.

Autres conseils

De TalkingTree et à la FAQ relative à Java HotSpot :

  

En règle générale, les avantages liés à la capacité à gérer de grandes quantités de mémoire entraînent une faible perte de performances des machines virtuelles 64 bits par rapport à l'exécution de la même application sur une machine virtuelle 32 bits. Cela est dû au fait que chaque pointeur natif du système occupe 8 octets au lieu de 4. Le chargement de ces données supplémentaires a un impact sur l'utilisation de la mémoire, ce qui se traduit par une exécution légèrement plus lente en fonction du nombre de pointeurs chargés lors de l'exécution de votre programme Java.
  La bonne nouvelle est qu'avec les plates-formes AMD64 et EM64T s'exécutant en mode 64 bits, la machine virtuelle Java dispose de registres supplémentaires qu'elle peut utiliser pour générer des séquences d'instructions natives plus efficaces. Ces registres supplémentaires augmentent les performances au point où il n’ya souvent aucune perte de performance lorsqu’on compare la vitesse d’exécution de 32 à 64 bits.

     

La différence de performances entre une application fonctionnant sur une plate-forme 64 bits et une plate-forme 32 bits sur SPARC est de l'ordre de 10 à 20% de dégradation lorsque vous passez à une machine virtuelle 64 bits . Sur les plates-formes AMD64 et EM64T, cette différence varie de 0 à 15% en fonction de la quantité de pointeur accédant à votre application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top