对象序列化过程中的Akka-StackOverflowError[英] Akka - StackOverflowError during object serialization

问题描述

我遇到了超过 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)

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

谢谢

推荐答案

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

其他推荐答案

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

本文地址:https://www.itbaoku.cn/post/978361.html