在Android上使用parseFrom(inputStream)时有很多gc

时间:2013-11-06 11:11:52

标签: android protocol-buffers

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);

1 个答案:

答案 0 :(得分:1)

Google创作的Java protobuf实现针对在OpenJDK / HotSpot /等上运行的服务器进行了优化,其中分配小型短期对象非常有效。 Dalvik做出了不同的性能权衡,并可能需要一种不同的实现方式。不幸的是,你没有太多办法可以让谷歌实现更好(它可能需要深度重新设计),但你可以尝试一下这里列出的其他一些Java protobuf实现,看看它们是否有更好的表现: / p>

https://code.google.com/p/protobuf/wiki/ThirdPartyAddOns

事实上,看起来其他Java实现的所有都是为移动环境明确设计的。