5

我有一个类,我想看看当这个类的对象被序列化时哪些子对象占用的空间最多。除了查看代码并手动分析之外,有没有什么好的工具/方法可以做到这一点?

例如,我想让工具说“成员 a 占 20%,b 30%,成员 c 占 50%”。

谢谢

PS我发现了一些相关的问题,但没有找到我的具体问题的答案。

4

3 回答 3

1

计算对象大小的唯一相对较快的方法是首先写入整个对象,计算使用情况(例如,写入 ByteArrayOutputStream),然后写入每个引用的对象。

有几点需要考虑:

  • ObjectOutputStream 确实做了一些缓存,以便能够用一个简单的指针引用以前写入的对象。使用 reset() 方法清除此缓存。
  • 编写的每个新对象类型首先具有类描述。其开销取决于您所指的相同类型对象的数量。
  • 初始化 ObjectOutputStream 有一个(小的,4 字节)开销。

有关协议的说明,请阅读此说明

于 2012-06-18T07:26:58.530 回答
0

好吧,我从来没有听说过这样的工具。但我认为内存中的对象大小和序列化对象大小之间存在某种关系。因此,您可以尝试使用分析器:VisualVM,它包含在 JDK 或我最喜欢的YourKit Profiler中。

于 2012-06-18T06:48:41.263 回答
0

DbVisualizer提供了Serialized Java Objects Viewer

serialysis在 Eclipse 是否有用于 java 序列化文件的编辑器/查看器中还提到了一个工具

于 2016-03-11T14:21:24.190 回答