我正在评估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