2009-04-08 14 views

Respuesta

12

Swig hace que JNI también sea más fácil.

En términos de velocidad, sospecho que habrá variaciones sutiles: le sugiero que elija una llamada que sabe que va a hacer mucho, y comparar todas las soluciones que ofrece.

+6

Downvoters: por favor explique, o el downvote es inútil ... –

10

JNI es el más rápido. JNA es muy lento en comparación con JNI (la sobrecarga de llamadas es probablemente de un orden de magnitud), pero es una biblioteca fantástica porque hace que el acceso nativo sea tan fácil. JNA es ideal si necesita hacer una llamada ocasional a alguna API nativa. Si te preocupa el rendimiento, no lo usaría en ningún "circuito cerrado".

No estoy seguro de qué lugar de NativeCall en el espectro.

2

This blog entry afirma que, debido a los mecanismos de introspección utilizados por JNA, será significativamente más lento que JNI. Sospecho que NativeCall usará mecanismos similares y, por lo tanto, funcionará de manera similar.

Sin embargo probablemente debería de referencia basado en los objetos particulares que está haciendo referencia y/o de clasificación entre Java y C.

me haría segunda recomendación de SWIG. Eso hace que la vida sea particularmente fácil (más fácil) para la interfaz Java/C.

+0

JNI no funciona. No creo que JNA lo haga tampoco. Los códigos nativos y Java funcionan con los mismos datos en la memoria. – erickson

+0

Tiene que someterse a algún tipo de transferencia de objeto, incluso si eso es solo una referencia de puntero. –

+0

Correcto, simplemente no quería que la gente se confunda porque se está produciendo algún tipo de serialización; solo son punteros. La sobrecarga primaria está en la introspección. – erickson

3

Varios parámetros influyen en el rendimiento de las interfaces entre los lenguajes de programación: en qué dispositivo se ejecuta JVM, quién lo desarrolló (en caso de que no sea la Sun JVM habitual), si necesita devolver el código Java desde código nativo , el modelo de enhebrado de la máquina virtual Java en su sistema operativo y cómo asíncrono será el código nativo ...

usted no puede encontrar un punto de referencia fiable que las medidas exactamente lo que necesita, me temo.

Cuestiones relacionadas