FlatBuffer的Java实现是零分配吗?

时间:2017-05-25 00:49:49

标签: java flatbuffers

我的Java应用程序将Protobuf消息存储在数据库中。应用程序很快,但它可以更快,因为并非所有部分消息都被使用,导致不必要的数据浪费CPU周期。此外,一些消息具有树状结构,导致分配的内存比我想要的更多。

在做了一些研究后,似乎FlatBuffers将是一个不错的替代品,因为它声称它是零分配/零分析。但是,benchmarks已针对C ++运行。我的应用程序是用Java编写的。 FlatBuffer的Java实现仍然很快,它仍然是零分配/零解析吗?

2 个答案:

答案 0 :(得分:3)

尝试尽可能接近零分配,但这并非完全可能。

例如,作为C ++(和C#)中值的访问者对象是Java中的分配。但是,它们可以在多个对象之间重复使用,因此它们的成本可能很低,因为代码复杂性会更高。

更糟糕的是字符串,在FlatBuffers中是UTF-8,但Java并不直接支持UTF-8。因此,如果您想以String的形式访问它,则必须对其进行转换和分配。您也可以将其作为UTF-8 ByteBuffer进行访问,但只有极少数的API才有用。

但是,如果数据的所有部分都没有被使用或逐步使用,那么这仍然是一次解包/分配所有内容的巨大收益。

答案 1 :(得分:2)

library code判断,解析和对象分配在属性访问时都会延迟发生。

至于速度,我无法想象这比首先从数据库中获取数据要慢得多 - 但可以自由地对它进行基准测试: - )