Java - 检查序列化对象结构的简便方法?

时间:2012-06-18 06:35:28

标签: java serialization

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

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

由于

P.S。我发现了一些相关的问题,但没有找到我在那里的具体问题的答案。

3 个答案:

答案 0 :(得分:1)

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

有几个需要考虑:

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

有关协议的说明,请阅读this description

答案 1 :(得分:-1)

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

答案 2 :(得分:-1)