栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过Java有效地通过套接字发送大int []

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过Java有效地通过套接字发送大int []

正如我在评论中指出的那样,我认为您正在打破处理器的限制。因为这可能对其他人有帮助,所以我将其分解。这是将整数转换为字节的循环:

    for(int i = 0; i < input.length; i++) {        output[i*4] = (byte)(input[i] & 0xFF);        output[i*4 + 1] = (byte)((input[i] & 0xFF00) >>> 8);        output[i*4 + 2] = (byte)((input[i] & 0xFF0000) >>> 16);        output[i*4 + 3] = (byte)((input[i] & 0xFF000000) >>> 24);    }

该循环执行500,000次。您的600Mhz处理器每秒可以处理大约600,000,000次操作。因此,循环的每次迭代将为每个操作消耗大约1/1200秒。

同样,使用非常粗糙的数字(我不知道ARM指令集,因此每个动作可能或多或少),这是一个操作计数:

  • 测试/分支:5(检索计数器,检索数组长度,比较,分支,增量计数器)
  • 掩码和移位:10 x 4(检索计数器,检索输入数组基数,相加,检索掩码,以及移位,乘法计数器,相加偏移量,相加到输出基数,存储)

好的,所以从粗略的角度来看,此循环 最多
需要55/1200秒或0.04秒。但是,您没有处理最佳情况。一方面,对于如此大的阵列,您将不会从处理器缓存中受益,因此,您将在每个阵列存储和加载中引入等待状态。

另外,我描述的基本操作可能会也可能不会直接翻译成机器代码。如果没有(我怀疑没有),那么循环将比我所描述的花费更多。

最后,如果您真的很不幸,JVM尚未对您的代码进行JIT编辑,因此对于循环的某些部分(或全部),它解释字节码而不是执行本机指令。我对Dalvik的了解不足,无法对此发表评论。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/508993.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号