1

我遇到了一个持续超过 2 天的问题。当我在演员之间交换消息时,正在指责 JVM 堆栈溢出。

我的消息是一个具有许多链接的对象(10000 多个子对象在一个链接列表中链接在一起)。即具有 Neo4J 关系的对象。

错误是这样的:

java.lang.StackOverflowError
    at java.io.Bits.putLong(Bits.java:108)
    at java.io.ObjectOutputStream$BlockDataOutputStream.writeLong(ObjectOutputStream.java:1928)
    at java.io.ObjectOutputStream.writeLong(ObjectOutputStream.java:788)
    at java.util.Date.writeObject(Date.java:1303)
    at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1469)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400)

有没有人对此有任何解决方案?

谢谢

4

2 回答 2

4

您使用的是java.util.LinkedList,还是您自己的自定义链表?如果是后者,您需要writeObject()为它编写一个自定义方法,以避免在没有递归时发生的递归。

于 2011-06-20T23:37:51.680 回答
-1

该问题的可能候选对象是具有自身引用的对象。鉴于您对域的表达,我怀疑孩子有一个包含自身的链表或循环引用。也就是说,它所链接的节点之一依次具有到它的链接。

于 2011-06-20T19:34:13.980 回答