我正在 android 上评估 i-jetty。 我看到 i-jetty 支持 NIO 并且它默认启用。 这使我明白了这一点: NIO和传统IO在android上的对比如何?
乍一看,在移动平台上,NIO似乎会做得更好,因为它可以节省更多内存。 另一方面,OIO 可以更好地适应,因为通常我们不需要像在 Java EE 上那样需要很多开放套接字。
最佳答案
这不是一个答案。只想与两个实现共享快速手动测试的结果:
测试是在具有 LTE 的同一设备 (Android 4.0.4) 上完成的。 8分钟内,108个请求一个一个发出(无并发)。请求分为 5 个部分:NIO -> OIO -> NIO -> OIO -> NIO。该请求是对 UserGrid API 的 HTTP PUT 请求,它返回相同的响应,该响应被转换为字符串并以相同的方式处理。
以毫秒为单位:
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测试多了一个稍微慢一点的“first run”。但是,它不应该对平均值/均值产生太大影响。
从这个测试中,您可以说 NIO 在响应时间方面更具可预测性。
正如我所说,这并不是要回答。我有兴趣查看其他测试结果并弄清楚 NIO/OIO 在哪种情况下更好。谢谢
关于Android 上的 Java NIO 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124991/