2010-07-04 4 views
1

L'en-tête PE de l'ensemble .NET a une plate-forme cible pour 32 bits/64 bits qui est utilisée lorsque l'assemblage utilise l'interopératif natif comme P/Invoke (sinon il serait Target=AnyCPU).Java, 64 bits, JNI - par rapport à .NET CLR

Existe-t-il un équivalent pour Java lorsque l'application Java a une interface avec une interface native via JNI? L'interface JNI doit être compilée pour 32 bits ou 64 bits.

Existe-t-il un article expliquant l'architecture et le développement Java 64 bits? Je n'ai pas pu en trouver un.

Répondre

1

Vous pouvez détecter 64 bits en utilisant:

public static final boolean is64bit = (System.getProperty("sun.arch.data.model").indexOf("64") != -1) 

Vous pouvez également démarrer Java dans 32 ou 64 bits en utilisant -d32 ou -d64.

Si cela se produit pour une application Web ou de bureau, il peut y avoir un moyen de le spécifier à partir du fichier manifeste.

+0

Il s'agit d'une propriété système spécifique à Sun et non documentée, qui peut ne pas fonctionner sur d'autres implémentations JVM ou sur de futures versions Oracle Java. – Jesper

+0

Je ne cherche pas à déterminer quelle plate-forme je cours. Ma question est de savoir si je peux marquer mon code qu'il n'est pas compatible avec 32 bits, donc il ne fonctionnerait pas sur Java implicite 32 bits. Bien sûr, cela peut être mis en œuvre manuellement avec votre technique suggérée – Saar

0

Vous pouvez regarder la propriété système os.arch:

String osArch = System.getProperty("os.arch"); 

Malheureusement, les valeurs possibles pour cette propriété ne sont pas documentés, mais vous pouvez l'essayer sur différents systèmes pour voir ce qu'il retourne (en utilisant Sun JDK 6 mise à jour 20 sur mon système 64 bits, il renvoie amd64).

Voir la documentation de l'API de java.lang.System.getProperties() pour les autres propriétés système disponibles.

Questions connexes