2012-06-20 78 views
3

我正在評估android上的i-jetty。 我看到i-jetty支持NIO,並且默認啓用。 這讓我非常關注: NIO和傳統IO在android上如何比較?Android上的Java NIO性能

乍一看,似乎在移動平臺上NIO會做得更好,因爲它可以節省更多的內存。 另一方面,OIO可以更好地適應,因爲通常我們不需要很多開放式套接字,就像我們在Java EE上做的那樣。

+0

測試和測量。 NIO會保存在線程上,如果你做得對,即在一個線程中,並因此節省線程堆棧,從而節省內存。在wifi或4G速度下,無論如何你都會被網絡綁定,而不是CPU綁定。 – EJP

+0

根據這個http://blog.codepainters.com/2012/02/02/17/why-java-nio-is-a-better-idea-for-android/,NIO可以避免一些錯誤非NIO套接字代碼。 – RenniePet

回答

2

這不是一個答案。只是想用兩種實現共享快速手動測試的結果:

  1. NIO與ION(1.1.5)由科希克杜塔
  2. OIO與OkHttp(1.1.1)的傢伙在廣場

測試在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/ION測試還有一個稍微慢一點的「首次運行」。但是,它對平均數/平均數不應有大的差異。

從這個測試中,你可以說NIO在響應時間上更具可預測性。

正如我所說的,這並不意味着回答。我很想看看其他測試結果,並找出在哪種情況下NIO/OIO更好。 thx

+0

該測試對OIO有利,但NIO結果更好。 1)單線程。 2)3個NIO,一個額外的初始化。但差異並不顯着,所以我甚至不會說在Android 4.0.4上使用ION比OkHttp更好 – mingfai