2009-04-08 84 views

回答

12

Swig也使得JNI更容易。

就速度而言,我懷疑會有微妙的變化 - 我強烈建議你選擇一個你知道你會做很多事情的電話,並對所有提供的解決方案進行基準測試。

+6

Downvoters:請解釋,或downvote是毫無意義的... – 2009-04-08 17:52:53

10

JNI是最快的。 JNA與JNI相比非常緩慢(調用開銷可能是一個數量級),但它是一個非常棒的庫,因爲它使本地訪問變得如此簡單。如果你需要偶爾調用一些本地API,JNA非常棒。如果你關心性能,我不會在任何「緊密循環」中使用它。

我不確定NativeCall適合哪些頻譜。

2

This blog entry聲稱由於JNA使用的內省機制,它會比JNI慢得多。我懷疑NativeCall會使用類似的機制,從而以類似的方式執行。

然而,你應該根據特定對象如果引用和/或Java和C

之間編組我第二SWIG推薦可能的基準。這使得Java/C接口的生活特別容易(更容易)。

+0

JNI不marshall。我不認爲JNA也會這樣做。本機代碼和Java代碼都可以在內存中使用相同的數據。 – erickson 2009-04-08 16:25:43

3

只有幾個參數會影響編程語言之間接口的性能:JVM運行在什麼設備上,誰開發它(如果它不是通常的Sun JVM),是否需要從本地代碼回調Java代碼,操作系統上JVM的線程模型以及本機代碼的異步性如何...

您可能找不到一個可靠的基準測試,它確切地衡量您需要的東西,恐怕。

相關問題