97 votes

Java 32 bits vs 64 bits de compatibilité

Sera code Java construit et compilé avec une version 32 bits du JDK en 32-bit byte code du travail dans une JVM 64 bits? Ou ne une JVM 64 bits nécessitent 64 bits de l'octet de code?

Pour donner un peu plus de détail, j'ai le code qui a été de travailler dans un environnement Solaris exécution d'une JVM 32 bits, mais maintenant j'ai des problèmes après la mise à niveau du JDK et de Weblogic Server 64 bits.

93voto

Zifre Points 14109

Oui, le bytecode Java (et le code source) est indépendant de la plateforme, en supposant que vous utilisez plate-forme indépendante de bibliothèques. 32 vs 64 bits ne compte pas.

20voto

Fortyrunner Points 8072

J'ai accidentellement couru notre (largeish) application sur un 64 bits VM plutôt que de 32 bits VM et n'avais pas remarqué jusqu'à ce que certaines bibliothèques externes (appelé par JNI) a commencé à défaut.

Les données sérialisées sur une plate-forme 32 bits a été lu sur la plate-forme 64 bits sans aucun problème à tous.

Quel genre de questions en êtes-vous? Faire certaines choses fonctionnent et pas d'autres? Avez-vous essayé de fixation de JConsole etc et avoir un pic autour de vous?

Si vous avez un très gros VM, on peut trouver que GC questions en 64 bits peut vous affecter.

11voto

Oui à la première question et non à la deuxième question, c'est une machine virtuelle. Votre problème est probablement lié à l'quelconque des changements dans la mise en œuvre de bibliothèque entre les versions. Bien qu'il pourrait être, par exemple, une condition de course.

Il y a quelques cerceaux de la VM. Notamment des références sont traitées dans les fichiers de classe comme si ils ont pris le même espace que ints sur la pile. double et long prendre jusqu'à deux fentes. Par exemple, les champs, il y a certains réarrangement de la VM va généralement par le biais de toute façon. Cela est fait (relativement) de manière transparente.

Aussi quelques 64 bits Jvm utiliser "compressé" loops". 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'une "marque" bit peut être volé pour certains algorithmes). Cela permet d'adressage de 32 bits de données (donc à l'aide de la moitié de la bande passante, et donc plus rapide) pour utiliser les tailles de tas de 35 ou 36 bits sur une plate-forme 64 bits.

10voto

Peter Lawrey Points 229686

Tous les code octet de 8 bits en fonction. (C'est pourquoi il est appelé BYTE code) Toutes les instructions sont un multiple de 8 bits. Nous développons sur les machines 32 bits, et nos serveurs avec la JVM 64 bits.

Pourriez-vous donner quelques détails du problème que vous rencontrez? Ensuite, nous pourrions avoir une chance de vous aider. Sinon on ne fait que deviner quel est le problème que vous rencontrez.

8voto

Sauf si vous avez un code natif (machine code compilé pour un arcitechture) votre code de fonctionner aussi bien en 32 bits et JVM 64 bits.

Notez, cependant, qu'en raison de la plus grande des adresses (32 bits soit 4 octets, 64 bits est de 8 octets) une JVM 64 bits nécessitent plus de mémoire qu'une JVM 32 bits pour la même tâche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X