Java XMLDecode和弱引用

时间:2011-10-12 20:26:24

标签: java xml-serialization

我的问题是关于在Java中使用弱引用以及XMLDecode如何处理它。假设我有两个对象,A和B. B包含对A的弱引用。我使用XMLEncode将它们写入磁盘,稍后我使用XMLDecode将它们读回来。

据我了解,垃圾收集器运行时没有设置合约,因此如果XMLDecode通过在A之前初始化B开始,则在初始化A之前有一个简短的窗口,当弱引用可能被无意中断开时。这是对的吗?

此外,如果XMLDecode碰巧在B中的弱引用中初始化A,然后在我们尝试从XMLDecode.readObject()显式加载A时尝试使用此A实例,那么这肯定会导致空指针异常,如果垃圾收集器在初始化和赋值之间运行?必须有一些东西来避免这种情况,或者我对垃圾收集过程有误解的事情。

1 个答案:

答案 0 :(得分:0)

如果A是由B实例中存在的弱引用弱引用的对象,则在序列化然后反序列化结构时,初始化序列将为:

  1. 创建B

  2. 的实例
  3. 创建B

  4. 的弱-ref内部实例
  5. 创建A
  6. 的对象
  7. 将步骤2中的弱参考设置为在步骤3中初始化的对象。
  8. 在这些步骤中没有任何地方可以让GC收集A的实例。