0

HibernateとSQLiteDialectを使用したJavaプロジェクトがあります。さらに、モデル要素間に多くのリンクがあるモデルがあります。DBに大量のデータを保存したい場合、不規則なスタックオーバーフローが発生します。時々それは動作します。時々それは機能しません。何故ですか?

例外:

sun.nio.cs.SingleByte.withResult(不明なソース)で

at sun.nio.cs.SingleByte.access$000(Unknown Source)
at sun.nio.cs.SingleByte$Encoder.encodeArrayLoop(Unknown Source)
at sun.nio.cs.SingleByte$Encoder.encodeLoop(Unknown Source)
at java.nio.charset.CharsetEncoder.encode(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.BufferedWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
at java.io.PrintStream.write(Unknown Source)
at java.io.PrintStream.print(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
    ...
4

1 に答える 1

0

Java では、スタックはネストされたメソッド呼び出しを一定量しか保持できません。たとえば、大きなツリーのような構造があり、ツリーの高さが最大スタック サイズよりも大きい場合、スタック オーバーフローが発生します。スタック オーバーフローの最も一般的な原因は、再帰的または循環的な依存関係がある場合です。

したがって、データ構造に循環依存関係がある可能性があるかどうかを調べることをお勧めします。

そうではなく、構造が実際には大きすぎる場合は、データを再設計または分割して管理しやすくすることを検討する必要があります。最後の手段として、スタック サイズを増やすことができます。

于 2012-04-20T11:03:22.687 に答える