我正在評估android上的i-jetty。 我看到i-jetty支持NIO,並且默認啓用。 這讓我非常關注: NIO和傳統IO在android上如何比較?Android上的Java NIO性能
乍一看,似乎在移動平臺上NIO會做得更好,因爲它可以節省更多的內存。 另一方面,OIO可以更好地適應,因爲通常我們不需要很多開放式套接字,就像我們在Java EE上做的那樣。
我正在評估android上的i-jetty。 我看到i-jetty支持NIO,並且默認啓用。 這讓我非常關注: NIO和傳統IO在android上如何比較?Android上的Java NIO性能
乍一看,似乎在移動平臺上NIO會做得更好,因爲它可以節省更多的內存。 另一方面,OIO可以更好地適應,因爲通常我們不需要很多開放式套接字,就像我們在Java EE上做的那樣。
這不是一個答案。只是想用兩種實現共享快速手動測試的結果:
測試在LTE上使用相同設備(Android 4.0.4)完成。在8分鐘內,108個請求逐一進行(沒有併發)。這些請求分爲5個部分:NIO - > OIO - > NIO - > OIO - > NIO。該請求是對UserGrid API的HTTP PUT請求,該請求返回的轉換爲String的相同響應以相同方式處理。
在毫秒:
NIO/ION 60 times OIO/OkHttp for 48 times
Min. : 889 Min. : 629.0
1st Qu.: 1086 1st Qu.: 774.5
Median : 1426 Median : 1241.0
Mean : 1659 Mean : 1712.2
3rd Qu.: 1697 3rd Qu.: 1881.2
Max. :10913 Max. :16333.0
Std Dev: 1329.406 Std Dev: 2254.099
備註:
從這個測試中,你可以說NIO在響應時間上更具可預測性。
正如我所說的,這並不意味着回答。我很想看看其他測試結果,並找出在哪種情況下NIO/OIO更好。 thx
該測試對OIO有利,但NIO結果更好。 1)單線程。 2)3個NIO,一個額外的初始化。但差異並不顯着,所以我甚至不會說在Android 4.0.4上使用ION比OkHttp更好 – mingfai
測試和測量。 NIO會保存在線程上,如果你做得對,即在一個線程中,並因此節省線程堆棧,從而節省內存。在wifi或4G速度下,無論如何你都會被網絡綁定,而不是CPU綁定。 – EJP
根據這個http://blog.codepainters.com/2012/02/02/17/why-java-nio-is-a-better-idea-for-android/,NIO可以避免一些錯誤非NIO套接字代碼。 – RenniePet