0

协议缓冲区精简版:2.5.0

在 Android 上解析 InputStream 时,我得到了很多 gc。
gc 大大减慢了接收数据并将其写入数据库的过程 - 该怎么办?

GC 在 81 毫秒内释放了 16514 个对象 / 714496 个字节
GC 在 90 毫秒内释放了 20570 个对象 / 888776 个字节 GC在 99 毫秒内释放了 22768 个
对象 / 908208 个字节

File f = new File(Environment.getExternalStorageDirectory().getPath(), "protobuf.dat");
FileInputStream istream = new FileInputStream(f);
FooBar data = FooBar.parseFrom(istream);
4

1 回答 1

1

Google 编写的 Java protobuf 实现针对在 OpenJDK/HotSpot/etc. 上运行的服务器进行了优化,在这些服务器中分配小的短期对象是有效的。Dalvik 做出了不同的性能权衡,可能需要不同类型的实现。不幸的是,您无法使 Google 实现更好地工作(它可能需要进行深入的重新设计),但您可以尝试此处列出的其他一些 Java protobuf 实现,看看它们中的任何一个是否性能更好:

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

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

于 2013-11-06T22:33:01.180 回答