gpt4 book ai didi

java - 如何在不实际序列化对象的情况下估计 Java 中对象的序列化大小?

转载 作者:太空狗 更新时间:2023-10-29 22:55:54 25 4
gpt4 key购买 nike

要增强集群中的消息传递,重要的是要在运行时了解消息的大小(我应该更喜欢本地处理还是远程处理)。

我只能找到有关基于 Java 检测估计对象内存大小的框架。我已经测试了 classmexer,它没有接近序列化大小和 sourceforge SizeOf。

在一个小型测试用例中,SizeOf 的错误率大约为 10%,而且比序列化快 10 倍。 (仍然 transient 完全打破了估计,因为例如 ArrayList 是 transient 的但被序列化为数组,修补 SizeOf 并不容易。但我可以接受)

另一方面,10% 错误率的 10 倍速度似乎不太好。我有什么想法可以做得更好吗?

更新:我还测试了 ObjectSize ( http://sourceforge.net/projects/objectsize-java )。结果似乎只适用于非继承对象:(

最佳答案

类在运行时占用的大小不一定与其在内存中的大小有任何关系。您提到的示例是 transient 字段。其他示例包括对象何时实现 Externalizable 并自行处理序列化。

如果一个对象实现了 Externalizable 或提供了 readObject()/writeObject() 那么你最好的办法是将该对象序列化到一个内存缓冲区以找出大小。它不会很快,但会很准确。

如果对象使用默认序列化,那么您可以修改 SizeOf 以考虑 transient 字段。

在序列化许多相同类型的对象之后,您可以为该类型建立一个“序列化配置文件”,将序列化大小与来自 SizeOf 的运行时大小相关联。这将允许您快速估计序列化大小(使用 SizeOf),然后将其与运行时大小相关联,以获得比 SizeOf 提供的结果更准确的结果。

关于java - 如何在不实际序列化对象的情况下估计 Java 中对象的序列化大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3069018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com