java – 提高协议缓冲区的性能
我正在编写一个应用程序,需要从单个文件中快速反序列化数百万条消息.
应用程序的作用主要是从文件中获取一条消息,做一些工作然后丢弃消息.每条消息由~100个字段组成(并非所有消息都被解析,但我需要它们,因为应用程序的用户可以决定他想要处理哪些字段). 在这一刻,应用程序包含一个循环,在每次迭代中使用readDelimitedFrom()调用执行. 有没有办法优化问题,以更好地适应这种情况(拆分多个文件等…).另外,在这一刻由于消息的数量和每条消息的维度,我需要gzip文件(并且它在减小大小方面相当有效,因为字段的值非常重复) – 这虽然减少了性能. 解决方法
如果CPU时间是你的瓶颈(如果你直接从具有冷缓存的硬盘加载,这是不太可能的,但在其他情况下可能就是这种情况),那么这里有一些方法可以提高吞吐量:
>如果可能,使用C而不是Java,并为循环的每次迭代重用相同的消息对象.这减少了内存管理所花费的时间,因为每次都会重用相同的内存. // Do this once: CodedInputStream cis = CodedInputStream.newInstance(input); // Then read each message like so: int limit = cis.pushLimit(cis.readRawVarint32()); builder.mergeFrom(cis); cis.popLimit(limit); cis.resetSizeCounter(); (类似的方法适用于C.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 使用工厂方法使用@JsonCreator反序列化
- java – 怎么样?侦听位置设置被打开(Android Ap
- java – maven-dependency-plugin是否使用与其他
- XSLT转换为xmlSignature java?
- java – 如何在运行时调试我的Android应用程序的
- java – DBUnit不清理并在每个方法之后插入数据库
- java – 嵌入式ActiveMQ代理需要哪些依赖项?
- java-给定2d整数数组,递归找到总和为给定数字的路
- java – 设置Cookie无法在Spring web-mvc 4中运行
- servlets – 如何在java Web应用程序中指定过滤器