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

問題の可能性のある候補は、それ自体への参照を持つオブジェクトです。ドメインの表現を考えると、子供にはそれ自体を含むリンクリスト、または循環参照があると思います。つまり、リンク先のノードの1つに、順番にリンクがあります。

于 2011-06-20T19:34:13.980 に答える