Android 上的 Java NIO 性能

标签 java android nio ijetty

我正在 android 上评估 i-jetty。 我看到 i-jetty 支持 NIO 并且它默认启用。 这使我明白了这一点: NIO和传统IO在android上的对比如何?

乍一看,在移动平台上,NIO似乎会做得更好,因为它可以节省更多内存。 另一方面,OIO 可以更好地适应,因为通常我们不需要像在 Java EE 上那样需要很多开放套接字。

最佳答案

这不是一个答案。只想与两个实现共享快速手动测试的结果:

  1. NIO ION (1.1.5) 作者:Koushik Dutta
  2. OIO OkHttp (1.1.1) 广场上的人

测试是在具有 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/

相关文章:

java - 这个 Java 类声明正确吗?

java - 为什么 ByteBuffer 不提供读写 boolean 数据类型的方法

Android 首选项如何使用 switch 语句

java - Android - 无法解析符号 "R"

java - 在单独的类上执行 runOnUiThread

java - 每个客户端模型或 NIO react 器模式的旧 I/O 线程?

java - 想要在 Java 的属性文件中定义进程的状态序列

java - 调用原始类型 int 的构造函数

java - 有序表数据结构

java - JNI 无法加载 native 库