2012-04-20 38 views
0

我有一個用Hibernate和SQLite Dialect的java項目。另外,我有一個模型元素之間有很多鏈接。當我想要在數據庫中存儲大量數據時,會發生不規則的堆棧溢出。有時它可以工作。 somtimes它dosnt工作。這是爲什麼?用java中的休眠和sqlite不規則的stackoverflows

除外:

在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) 
    ... 
+0

你可以更新你的問題1-發生異常的代碼和2-異常的細節,包括理想的堆棧跟蹤。 – 2012-04-20 10:57:22

回答

0

在java中堆棧只能容納一定量的嵌套的方法調用的。因此,如果您的實例具有較大的樹狀結構,並且樹的高度較大,那麼最大堆棧大小將會導致堆棧溢出。儘管堆棧溢出的最常見原因是如果你有遞歸或循環依賴。

所以我給你的建議是要找出你的數據結構中是否有循環依賴。

如果您發現不這樣做,但您的結構實際上很大,您應該考慮重新設計或拆分數據以使其更易於管理。作爲最後的手段,可以增加堆棧大小。

+0

如果你發佈堆棧跟蹤和可能的代碼,它可能可以幫助你找出你是否有循環依賴。 – barsju 2012-04-20 11:04:10

+0

我也認爲它是由循環依賴造成的。但爲什麼有時候會這樣呢?我不想發佈代碼。它是一個具有多行代碼的不同大型模型。 – ChHaupt 2012-04-20 11:13:52

+0

@ user1346330如果可能,請嘗試創建一個包含最少量代碼的測試應用程序,以重新創建問題併發布該問題。很多時候,這個練習會揭露潛在的問題。 – 2012-04-20 12:19:10