Frage

Im Moment bin ich mit JNA für Java-native Kommunikation und bin mit seiner Einfachheit. Allerdings muss ich die Leistung zu optimieren und bin am überlegen mit anderen Bindungen.

Meine Frage ist: Welcher Teil von Java-native Kommunikation ist der „teuer“ Teil? Ist es die Weitergabe von Daten zwischen ihnen?

Lassen Sie es mich anders ausdrücken. Gerade jetzt die Funktionen mein JNA-Schnittstelle aufrufen, übergeben keine Daten an Java überhaupt, und die Funktionen sind nicht einmal so oft genannt wird. Mit anderen Worten, ruft Java Library-Call und dann die Bibliothek Anruf tut seine eigene Sache für eine Weile und gibt einen Urtyp. Will JNI / Swig / etc sein schneller als JNA in einer solchen Situation?

War es hilfreich?

Lösung

Bei Ihrer Use-Case-JNI keine höhere Geschwindigkeit als JNA sein.

Was ist teuer über die Java-native Interaktion ist die Übertragung großer Mengen an Speicher. Insbesondere kann es sehr teuer sein, um Java-Speicher in dem nativen Code zur Verfügung zu stellen; IIRC das ist zum Teil, weil Java auf den Speicher-Segment können wählen, aber es mag, aber native Code wird zusammenhängende Abschnitte des Speichers erwarten -. Der Bewegung / des Speichers Kopieren dauert einige Zeit,

Wenn Sie über die Leistung besorgt sind, sollten Sie sicherstellen, dass Ihr JNA Code die „direkte“ Stil Zugriff verwendet anstatt der ursprünglichen Schnittstelle Stil Zugriff.

Wenn Sie darüber hinaus große Mengen an Speicher zwischen Java und nativen Code zu übertragen brauchen sollten Sie eine einzelne anfängliche direkte Zuordnung prüfen (falls möglich) und vermeiden Sie sich regelmäßig, dass der Speicher Neuzuweisung. Auf diese Weise zahlen Sie die Verrechnungskostenart nur einmal, und am Anfang, so über eine große Anzahl von Anrufen auf Kosten vernachlässigbar werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top