Protocol Buffer lite:2.5.0
在Android上解析InputStream时,我得到了很多gc gc减慢了接收数据的过程并将其写入数据库很多 - 该怎么做?
GC在81ms中释放了16514个对象/ 714496个字节 GC在90ms内释放20570个对象/ 888776个字节 GC在99ms中释放了22768个对象/ 908208个字节
File f = new File(Environment.getExternalStorageDirectory().getPath(), "protobuf.dat");
FileInputStream istream = new FileInputStream(f);
FooBar data = FooBar.parseFrom(istream);
答案 0 :(得分:1)
Google创作的Java protobuf实现针对在OpenJDK / HotSpot /等上运行的服务器进行了优化,其中分配小型短期对象非常有效。 Dalvik做出了不同的性能权衡,并可能需要一种不同的实现方式。不幸的是,你没有太多办法可以让谷歌实现更好(它可能需要深度重新设计),但你可以尝试一下这里列出的其他一些Java protobuf实现,看看它们是否有更好的表现: / p>
https://code.google.com/p/protobuf/wiki/ThirdPartyAddOns
事实上,看起来其他Java实现的所有都是为移动环境明确设计的。