2012-02-21 71 views
2

我有一個java類,確實重位解碼和操縱。這個班級幾乎佔我應用程序總執行時間的96%。我想知道如果我爲這些位操作編寫一些c代碼並使用java本機方法來加載c庫,我的性能是否會顯着提高?JNI是增加位操作性能的解決方案嗎?

+1

可能。這正是大多數JVM可以很好處理的那種代碼。如果涉及到對象,數組或觸發器,那完全是另一回事。 – harold 2012-02-21 18:36:40

回答

1

我可以看到JNI /本機代碼更快的唯一方法是您可以通過將大數據集傳遞給本地方法來進行位操作來克服JNI調用開銷。請注意,與Java方法不同,JNI方法不能通過熱點內聯/優化。本地調用需要在Java和本機內存區域之間來回複製值。

3

唯一真正的方法是使用專用的Java基準測試工具 - Caliper想到 - 但我個人懷疑你會贏得足夠的性能超過JNI開銷。

2

正如路易斯所說,知道的最好方法就是衡量。通過JNI調用的開銷很大。要問的更好的問題是如果你經常調用你的方法。換句話說,要消耗96%的執行時間,您的位操作方法是否每秒被調用數千次,或者是否在單次調用中執行重要工作?如果是後者,那麼很可能您將從本機代碼中受益。

相關問題