2010-01-17 6 views

Répondre

1

Oui. Comme d'autres l'ont déjà mentionné, JNI ou Java Native Interface est la méthode préférée de Sun pour ce faire. Si vous pensez que vous aurez besoin d'appeler le code C depuis d'autres langages ainsi que Java, je regarderai dans SWIG, qui générera le code JNI de manière transparente pour vous, mais vous permettra également de faire des choses similaires avec, par exemple, Python.

4

Oui, vous pouvez le faire. Si vous devrait le faire est une autre question.

Du côté pro:

  • Appel de bibliothèques C de Java évitera la nécessité de recoder les bibliothèques en Java (mais voir ci-dessous).

  • Pour certains algorithmes intensifs de calcul, une implémentation C bien écrite peut être plus rapide qu'une version Java correctement écrite.

  • Certaines opérations spécifiques au système d'exploitation ne peuvent pas être implémentées en langage Java pur.

Du côté con:

  • Il y a un plus grand frais généraux pour faire un appel JNI par rapport à un simple appel de méthode Java.

  • Si votre bibliothèque C n'est pas adaptée aux threads, vous devez être très prudent en l'appelant depuis Java. Et en règle générale, les bibliothèques C ne sont pas implémentées avec la sécurité des threads en tête.

  • Si votre bibliothèque C a des problèmes de gestion de la mémoire, elle peut déstabiliser la plate-forme Java et provoquer des plantages JVM. L'appel immédiat de bibliothèques natives signifie que votre application est plus difficile à mettre en communication et nécessite un processus de construction plus complexe.

0

Il y a un certain nombre de C to (Java) bytecode compilers, qui peut être en mesure de transformer votre code C dans un .jar de classes Java portables que vous pouvez appeler directement à partir de Java.

détriments contre JNI:

  • Il y a une pénalité de performance notable, généralement au moins 100%.

avantages par rapport JNI:

  • Tout comme en cours d'exécution du code Java pur, il est sûr, ne nécessite pas de privilèges spéciaux pour charger, et ne nécessite pas de recompiler pour chaque plate-forme cible.

(Quand je dis « JNI » Je veux dire vraiment toutes les interfaces Java en code natif. Par exemple, le même pour CNI.)

+0

Un autre détriment par rapport à JNI est que vous ne serez pas capable de faire des choses spécifiques à la plateforme de cette façon ... et c'est (IMO) le cas d'utilisation le plus important pour les bibliothèques C. –

Questions connexes