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

高性能序列化:Java vs Google协议缓冲区vs…?

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

高性能序列化:Java vs Google协议缓冲区vs…?

我没有将协议缓冲区与Java的本机序列化在速度方面进行比较,但是对于互操作性,Java的本机序列化是一个严重的禁忌。在大多数情况下,它在空间方面也不会像协议缓冲区那样高效。当然,它可以存储的内容以及引用等方面都更加灵活。协议缓冲区非常适合它的预期用途,并且在满足您的需求时非常有用-
但由于互操作性,存在明显的限制(和其他东西)。

我最近在Java和.NET中发布了协议缓冲区基准测试框架。Java版本在Google主项目中(位于基准目录中),.
NET版本在我的C#端口项目中。如果要将PB速度与Java序列化速度进行比较,则可以编写类似的类并对它们进行基准测试。如果您对互操作感兴趣,那么我真的不会再考虑本机Java序列化(或.NET本机二进制序列化)。

除了协议缓冲区,还有其他一些可互操作的序列化选项-Thrift,JSON和YAML浮现在脑海,毫无疑问还有其他选择。

编辑:好的,互操作性不是那么重要,值得尝试从序列化框架中列出您想要的不同质量。您应该考虑的一件事就是版本控制-
这是PB设计成可以很好地处理的事情,无论是向前还是向后(这样,新软件就可以读取旧数据,反之亦然)-当您遵循建议的规则时,当然:)

在尝试对Java性能与本机序列化保持谨慎的同时,发现PB的速度反而让我真的感到惊讶。如果有机会,请使用服务器虚拟机-
我最近的基准测试表明,服务器虚拟机在序列化和反序列化示例数据方面的 速度其两倍 。我认为PB代码非常适合服务器VM的JIT :)

就像样本性能数据一样,我将使用服务器VM在笔记本电脑上获得了以下结果,即序列化和反序列化了两条消息(一个228字节,一个84750字节):

使用google_message1.dat文件进行基准化基准测试。GoogleSize$ SizeMessage1 序列化为字节字符串:30.16秒内进行2581851次迭代;18.613789MB /秒序列化为字节数组:29.842s中的2583547次迭代;18.824497MB /秒序列化到内存流:30.125秒内进行2210320次迭代;15.953759MB /秒从字节字符串反序列化:在30.088s中进行了3356517次迭代;24.256632MB /秒从字节数组反序列化:29.958s中的3356517次迭代;24.361889MB /秒从内存流中反序列化:29.821s中的2618821迭代;19.094952MB /秒使用文件google_message1.dat进行基准化基准测试。GoogleSpeed$ SpeedMessage1 序列化为字节字符串:29.978 s中进行了17068518次迭代;123.802124MB /秒序列化为字节数组:在30.043秒内迭代17520066;126.802376MB /秒序列化到内存流:30.076s中的7736665次迭代;55.93307MB /秒从字节字符串反序列化:在30.073s中进行16123669次迭代;116.57947MB /秒从字节数组反序列化:在30.109秒内迭代16082453;116.14243MB /秒从内存流中反序列化:在30.03秒内进行7496968次迭代;54.283176MB /秒使用文件google_message2.dat进行基准化基准测试。GoogleSize$ SizeMessage2 序列化为字节字符串:30.034秒内进行6266次迭代;16.826494MB /秒序列化为字节数组:在30.027秒内进行6246次迭代;16.776697MB /秒序列化到内存流:29.916s中的6042次迭代;16.288969MB /秒从字节字符串反序列化:29.819s中的4675次迭代;12.644595MB /秒从字节数组反序列化:在30.093s中进行4694次迭代;12.580387MB /秒从内存流中反序列化:在29.579s内进行了4544次迭代;12.389998MB /秒使用文件google_message2.dat进行基准化基准测试。GoogleSpeed$ SpeedMessage2 序列化为字节字符串:30.055秒内执行39562次迭代;106.16416MB /秒序列化为字节数组:30.178秒内进行39715次迭代;106.14035MB /秒序列化到内存流:30.032s中的34161次迭代;91.74085MB /秒从字节字符串反序列化:29.794 s中的36934次迭代;99.98019MB /秒从字节数组反序列化:在29.915s中进行了37191次迭代;100.26867MB /秒从内存流中反序列化:29.846 s中的36237次迭代;97.92251MB /秒

“速度”与“大小”是所生成的代码是否针对速度或代码大小进行了优化。(在两种情况下,序列化的数据都是相同的。“
size”版本是为以下情况提供的:您已定义了许多消息,并且不想为代码占用大量内存。)

如您所见,对于较小的消息,它可以 非常 快- 每毫秒 对500条以上的小消息进行序列化或反序列化。即使使用87K消息,每条消息花费的时间也不到毫秒。



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

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

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