java通過JNI調用C語言寫的函數,能提高運行效率嗎?

C語言比Java快早就是公認的事實了。而Java可以通過JNI調用C語言寫的庫很多人也都知道。

但通過JNI調用C語言寫的函數能提高效率嗎?一直以來我都認爲 是的 。昨晚心血來潮做了個測試,本意是想看看傳說中強大的C語言在速度上到底有多強大,結果讓我發現了 通過JNI調有C語言並不能提高效率 。不知道這樣的結論有沒有錯,先說一下我測試的過程吧:

第一個測試:用java循環1億次System.out.printf()

耗時:21 分 34.8 秒

第二個測試:用C語言循環1億次printf()

耗時:6 分 12.6 秒

剛做完以上兩個測試,就深刻體會到了C語言的效率。高興了十幾秒,我就想也許是java的 System.out.printf 和C語言的 printf 有較大區別造成的。於是做了第三個測試。

第三個測試:通過JNI調用C語言的printf(),同樣循環1億次輸出

1.

2.

耗時:20 分 23.3 秒(這是第二天的測試的)

使用時間跟直接用java的 System.out.printf 差不多。本人不知道每次調用 native 方法會不會有額外的耗時(先給個不確定的定論:會)也就是說第三個測試之所以不會加速,是因爲調用 native 方法時損耗了其它時間,還不能確定 通過JNI調用C語言能不能提高運行效率。又做了第四個測試

第四個測試:通過JNI調用C語言裏面的循環1億次printf(),不明白我說什麼的看代碼

1.

2.

耗時:19 分 54.2 秒(跟 測試三 一樣是第二天測試的)

出乎意料,第四個測試並沒有像 測試二 那樣,速度並不快。測試四沒有像 測試三 那樣調用了1億次 native 方法,它只調用了一次 native 方法,即使調用 native 方法會有額外的耗時也就只有一次,調用完這次native方法後接下來就是C語言裏面的1億次循環了。但結果很明顯,速度並沒有提升。。。。。

四個測試的結果,

第一個最慢,但它是在電腦用了一整天后測試的。

第二個最快,是在測試一之後測試的,電腦使用情況沒多大變化。

第三個比第一個稍快一點,是第二天一大早起來後測試的,電腦休息了一個晚上。

第四個比第三個又快一點,是在第三個測試後更改了部分代碼後測試的(跟測試3前後相差大約30分鐘)。

最終結論:java通過JNI調用C語言並不能提高效率。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章