Quelle est l'endianness que Java utilise dans sa machine virtuelle? Je me souviens d'avoir lu quelque part que cela dépendait de la machine physique sur laquelle il fonctionnait, et puis d'autres endroits où j'ai lu que c'est toujours, je crois, un gros boutiste. Qui est correct?Endianness de la machine virtuelle de Java
Répondre
Les données multi-octets des fichiers class
sont stockées en big-endian.
De The Java Virtual Machine Specification, Java SE 7 Edition, Chapter 4: The class
File Format:
Un fichier de classe se compose d'un flux de octets de 8 bits. Toutes les quantités 64 bits de 16 bits, 32 bits et sont construites par en lisant dans deux, quatre et huit octets consécutifs de 8 bits, respectivement. Les éléments de données multi-octets sont toujours stockés dans l'ordre big-endian, où les octets sont prioritaires.
En outre, l'opérande dans une instruction bytecode est également big-endian s'il s'étend sur plusieurs octets.
De The Java Virtual Machine Specification, Java SE 7 Edition, Section 2.11: Instruction Set Summary:
Si un opérande est plus d'un octet taille, il est stocké dans le grand-boutiste ordre d'ordre supérieur Octet. Pour exemple, un indice de 16 bits non signé en les variables locales sont stockées sous forme de deux octets non signés,
byte1
etbyte2
, tels que sa valeur est(byte1 << 8) | byte2
.
Alors oui, je pense qu'on peut dire que la machine virtuelle Java utilise big-endian.
Les données de travail réelles stockées dans le processus en cours correspondront presque certainement à l'endianess du processus d'exécution. Généralement les formats de fichiers (y compris les fichiers de classe) seront dans l'ordre du réseau (big endian).
Il est généralement difficile de savoir ce que la machine fait en dessous, car elle est extraite par la machine virtuelle. Vous ne pouvez pas lancer un short[]
en byte[]
comme vous pouvez en C et C++. java.nio.ByteOrder.nativeOrder() devrait vous donner l'endianess sous-jacente. L'endianess correspondante est utile lors de l'utilisation de tampons NIO non-octets.
- 1. Optimisation de machine virtuelle
- 2. Plantages aléatoires de la machine virtuelle Java dans ConcurrentGCThread
- 3. depuis le démarrage de la machine virtuelle Java
- 4. Machine virtuelle Globus Toolkit
- 5. Exécution de valgrind dans la machine virtuelle
- 6. Traitement des signaux dans la machine virtuelle Java
- 7. Configuration de la machine virtuelle Java via la ligne de commande sous Windows
- 8. Get IP de ma machine C# avec machine virtuelle installée
- 9. synchronisation entre la machine locale et virtuelle
- 10. écran de changement Python résolution machine virtuelle
- 11. RMI/Gestion des exceptions dans une machine virtuelle Java personnalisée
- 12. Quelle est la machine virtuelle Java la plus légère de tous les temps? (sauf KVM)
- 13. Obtention de variables locales à partir d'une image de pile sur la machine virtuelle Java
- 14. ActionScript Machine virtuelle 1 - Inspection de la mémoire
- 15. Comment contrôler l'utilisation de la mémoire des processus générés par une machine virtuelle Java
- 16. Puis-je effectuer un rendu sur plusieurs écrans à partir de la même machine virtuelle Java?
- 17. Plantage de la machine virtuelle pendant l'opération memcpy pendant le chargement de la classe
- 18. Obtention d'une liste de tous les chargeurs de classe dans une machine virtuelle Java
- 19. Comment renommer une machine virtuelle SharePoint
- 20. Endianness des entiers en Python
- 21. Pouvez-vous exécuter Jython sur la machine virtuelle Java qui s'exécute sur les stylets intelligents Pulse?
- 22. Considérations pour le développement d'un déploiement de machine virtuelle
- 23. Comment puis-je résoudre l'horloge dérivante de ma machine virtuelle?
- 24. Migration de logiciels déployés sur une machine virtuelle Linux?
- 25. Quelle application Java est disponible pour tester de manière stressante une machine virtuelle?
- 26. TortoiseSVN: Impossible de lire la ligne d'état dans la machine virtuelle
- 27. Impossible de se connecter à SQL Server 2008 Express de la machine virtuelle PC
- 28. Est-il possible d'obtenir une instance MemoryMXBean avec une machine virtuelle Java distante?
- 29. Modification du mot de passe de domaine à partir de la boîte TS à l'intérieur de la machine virtuelle VPC
- 30. Opérateurs bit à bit et «endianness»
Cette réponse est très trompeuse. Toutes les références expliquent comment les valeurs multi-octets sont stockées dans les fichiers de classe. Et le fichier de classe utilise en effet big endian. Cependant, à l'exécution, toutes les implémentations Java que je connais stockent des données de variables et de structures de données dans l'ordre des octets natifs. Cela s'applique aussi probablement aux opérandes d'instruction une fois que le fichier de classe a été chargé dans un meilleur format exécutable. Tout le reste serait extrêmement lent sur les architectures little endian telles que i386. – Codo