Portage de code natif depuis des systèmes 32 bits vers des systèmes 64 bits

Si votre application Java™ utilise du code natif, vous devez d'abord vous assurer que le code natif continue de fonctionner correctement lorsqu'il est porté vers l'environnement 64 bits. Vous devez aussi lui apporter les changements adéquats, qui lui permettront de fonctionner avec les versions 64 bits des interfaces JNI et JVMTI.

Consultez la documentation de votre système d'exploitation et de votre compilateur C/C++ pour connaître les changements nécessaires au portage du code de 32 bits à 64 bits. En particulier, notez les différences suivantes :
  • Windows: Sur les systèmes 32 bits, les entiers, les longs et les pointeurs sont tous des 32 bits. Sur les systèmes 64 bits, les entiers et les longs restent en 32 bits, mais les pointeurs deviennent des 64 bits et les long longs sont des 64 bits.
  • AIX® et Linux®: sur les systèmes 32 bits, les entiers, les longs et les pointeurs sont tous des 32 bits. Sur les systèmes 64 bits, les entiers restent en 32 bits, tandis que les longs et les pointeurs deviennent des 64 bits.

Tout le code natif doit être ajusté pour continuer à fonctionner compte tenu de ces différences. Le meilleur moyen d'y parvenir est d'entreprendre des changements qui permettent à une même copie du code source d'être compilée soit pour un système cible 32 bits, soit pour un système cible 64 bits. Pour cela, il n'existe pas de meilleure façon de procéder, mais une bonne règle à suivre est d'utiliser des types abstraits pour tous les entiers qui doivent être de la même taille qu'un pointeur. Par exemple, lors des calculs d'adresses, les types entiers abstraits deviennent des entités 32 bits ou 64 bits selon la taille d'un pointeur.

Sur les systèmes AIX et Linux , soyez prudent lorsque vous utilisez des types longs. Evitez si possible d'utiliser des entiers 'long', car ils changent de taille entre les systèmes 32 bits et les systèmes 64 bits.

Vous devez aussi veiller à ce que les types de données soient correctement alignés. Un alignement incorrect peut impacter gravement les performances du code. L'alignement correct de divers types de données est indiqué dans le tableau suivant :

Tableau 1. Taille ou alignement pour les types C et C++ sur différents systèmes d'exploitation
Type de données C/C++ Alignement sur les systèmes d'exploitation AIX ou Linux32 bits, ou z/OS 31 bits Alignement sur les systèmes d'exploitation AIX, Linuxou z/OS 64 bits Alignement sur les systèmes d'exploitation Windows 32 bits Alignement sur les systèmes d'exploitation Windows 64 bits
char 1/1 1/1 1/1 1/1
short 2/2 2/2 2/2 2/2
ent 4/4 4/4 4/4 4/4
long 4/4 8/8 4/4 4/4
long long 8/8 8/8 8/8 8/8
pointer 4/4 8/8 4/4 8/8
flottant 4/4 4/4 4/4 4/4
doublon 8/4 8/4 8/8 8/8
long double 16/16 16/16 8/8 8/8

Lorsque le code natif a été ajusté pour tenir compte des différences entre les systèmes 32 bits et les systèmes 64 bits, optimisez le code pour tenir compte des différences dans les interfaces de la machine virtuelle Java: JNI et JVMTI.