2009-04-08 8 views

risposta

12

Swig rende anche JNI più facile.

In termini di velocità, ho il sospetto che ci saranno variazioni minime. Vi consiglio caldamente di scegliere una chiamata che sapete che farete molto e confrontate tutte le soluzioni offerte.

+6

Downvoters: si prega di spiegare, o il downvote è inutile ... –

10

JNI è il più veloce. JNA è molto lento rispetto a JNI (l'overhead di chiamata è probabilmente un ordine di grandezza), ma è una libreria fantastica perché rende l'accesso nativo così facile. JNA è fantastico se devi effettuare una chiamata occasionale ad alcune API native. Se ti interessi delle prestazioni, non lo userei in nessun "ciclo stretto".

Non sono sicuro di dove NativeCall si adatti allo spettro.

2

This blog entry afferma che a causa dei meccanismi di introspezione utilizzati da JNA, sarà notevolmente più lento di JNI. Sospetto che NativeCall userà meccanismi simili e quindi si esibirà in modo simile.

Tuttavia si dovrebbe probabilmente punto di riferimento in base agli oggetti particolari che stai fanno riferimento e/o di smistamento tra Java e C.

Vorrei secondo la raccomandazione di SWIG. Ciò rende la vita particolarmente facile (più facile) per l'interfaccia Java/C.

+0

JNI non marshall. Non penso nemmeno che JNA lo faccia. Il codice nativo e Java funzionano entrambi con gli stessi dati in memoria. – erickson

+0

Devi subire qualche forma di trasferimento dell'oggetto - anche se è solo un riferimento a un puntatore. –

+0

Esatto, non volevo che la gente fosse confusa dal fatto che si stava verificando una sorta di serializzazione; sono solo degli indicatori. L'overhead primario è nell'introspezione. – erickson

3

Parecchi parametri influenzano le prestazioni delle interfacce tra i linguaggi di programmazione: quale dispositivo viene acceso da JVM, chi lo ha sviluppato (nel caso non sia il solito Sun JVM), se è necessario richiamare il codice Java dal codice nativo , il modello di threading della JVM sul tuo sistema operativo e in che modo asincrono il codice nativo sarà ...

Potresti non trovare un benchmark affidabile che misuri esattamente ciò di cui hai bisogno, temo.

Problemi correlati