Java,当一个Object反序列化并包含其他对象时,每个包含Object的唯一实例是什么?

时间:2014-06-17 02:14:16

标签: java serialization

我正在使用5个自定义对象,并且需要能够将它们保存(序列化)到文件中并在以后重新加载它们。所有对象都实现了Serializable,我可以单独保存并重新加载它们。

该程序基本上是模仿关系数据库,但我不能使用实际的数据库。

我的潜在问题是,一个或两个对象包含其他对象。从我的测试来看,似乎子对象完全保存在主对象中。

public foo1(Object o){
foo2(o);
//some other stuff
}

...

public foo2(){
//some stuff
}

当反序列化foo1对象时,它会正确地重新创建自己,包括任何foo2对象。

然而,我认为 foo2对象只是因为它们是foo1的一部分而被指向,并且包含foo2副本的foo1的任何后续实例将基本上创建更多foo2的相同但独立的实例。

我担心这会导致在程序加载所有foo1时可能会在内存中创建数百个相同foo2的副本。

假设情况属实,那么实施此流程的更好方法是什么?

1 个答案:

答案 0 :(得分:3)

没有。保留对象图的完整性。如果它包含对单个对象的多个引用,则在反序列化时保留。