Apache Ignite 二进制对象膨胀

Apache Ignite BinaryObject Bloat

我有一个自定义对象,我正在将其转换为 BinaryObject(使用 BinaryObjectBuilder),然后再将其放入 ignite 缓存。我计算了自定义对象的深度大小,大约是 500 字节。

但是当我计算 BinaryObject 的大小时,它高达 ~8 MB。

这是预期的吗?

如果你看一下 BinaryObjectImpl class,你会看到,有些字段有 @GridDirectTransient 注释,这意味着这些字段在序列化期间被忽略。这些都是相当大的对象,例如 BinaryContext,其中包含很多系统内容。

如果您想获得 BinaryObject 大小的近似值,您可以将其转换为 BinaryObjectImpl 并对其调用 BinaryObjectImpl#array() 方法。您将获得一个字节数组,它是对象的序列化表示。该数组的大小将为您提供 BinaryObject 大小的近似值。