Akka - StackOverflowError во время сериализации объекта - PullRequest
1 голос
/ 20 июня 2011

У меня проблема, которая продолжается более 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)

У кого-нибудь есть какое-либо решение для этого?

спасибо

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Используете ли вы java.util.LinkedList, или свой собственный связанный список?Если последнее, вам нужно написать собственный метод writeObject() для него, чтобы избежать рекурсии, которая случится, если у вас ее нет.

0 голосов
/ 20 июня 2011

Вероятным кандидатом на проблему является объект, имеющий ссылку на себя.Учитывая ваше выражение домена, я подозреваю, что у ребенка есть связанный список, который включает себя, или циклическая ссылкаТо есть один из узлов, с которыми он связан, по очереди имеет ссылку на него.

...