2012-06-20 50 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