Re: [蟲?] While(ture)迴圈中斷

看板java作者 (酷捏)時間14年前 (2009/10/29 13:02), 編輯推噓3(3012)
留言15則, 6人參與, 最新討論串2/2 (看更多)
昨天的程式跑到今天早上又結束了 後來發現是 Thread 會有 java.lang.OutOfMemoryError: Java heap space 我想請問一段程式碼 關於連結 DB public void insertTable(ArrayList<News> news) // News 是要存入資料庫的 Object { String insertSQL = "insert into XX values (XX) "; Connection con = null; PreparedStatement pst = null; try { con = getConnection(); pst = con.prepareStatement(insertSQL); News temp; for(int i = 0; i < news.size() ; i++) { temp = news.get(i); pst.set.... pst.addBatch(); } pst.executeBatch(); } catch(SQLException e) { e.printStackTrace(); } finally { try { pst.close(); con.close(); } catch(SQLException e) { System.out.println("Close Exception :" + e.getMessage()); } } } 大概有20個 Thread 會同時跑這個方法 所以我把 Connection 跟 PrepareStatement 寫在 fuction裡 Connection 取得的方法 getConnection 是我用 proxool 做了一個 Connection Pool 若是 connection 被取完了 就等待x秒 請問我這樣的寫法 會造成有些東西不能 gc 嗎 或是我少關了什麼 還是我需要 clearBatch(); 才能 close PrepareStatement? ※ 引述《icecastleo (酷捏)》之銘言: : 我有一個While迴圈 : 每隔一段時間會開啟 Thread : 接著 Sleep : 但程式有時候會自動結束 : 大概一天 : 主程式並沒有 Throw 任何 Exception : 請問我要怎麼知道 : Java程式自動關閉的原因? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.167.7.129

10/29 13:42, , 1F
請不要用「--」當分隔線
10/29 13:42, 1F

10/29 13:43, , 2F
其他的... 我想你自己作測試 or 找軟體幫你測試就知道了
10/29 13:43, 2F

10/29 13:43, , 3F
我會猜你的問題出在 news 超級大,還有
10/29 13:43, 3F

10/29 13:43, , 4F
下次別再輕易說「沒有錯誤訊息」這種事情了... [嘆氣]
10/29 13:43, 4F

10/29 13:50, , 5F
板友都有超直覺XD (誤
10/29 13:50, 5F
抱歉改掉分隔線了 我的 News 只有幾個 private 欄位 跟Get 的 Method 我想我在去找找其他地方好了 所以 Out of Memory 太多次 JVM就會強制關閉我的程式嗎? 我可能沒搞懂 我以為Thread造成的 Exception 有處理的話 主程式還是不會自動結束 所以我說主程式沒有錯誤訊息 > < ※ 編輯: icecastleo 來自: 218.167.7.129 (10/29 14:04)

10/29 14:37, , 6F
您有處理OutOfMemoryError的話,程式是不應直接結束沒錯
10/29 14:37, 6F

10/29 14:53, , 7F
樓上: 正常來說 OutOfMemoryError 不該也沒法處理
10/29 14:53, 7F

10/29 15:05, , 8F
我比較相信是一般人不會去處理這個^^"
10/29 15:05, 8F

10/29 20:47, , 9F
以前用hibernate作過累似的事情.. 要insert1000萬筆資料...
10/29 20:47, 9F

10/29 20:50, , 10F
分公司的交易.. 一筆一筆作就等著outofmemory.. 兩種作法....
10/29 20:50, 10F

10/29 20:52, , 11F
交易許可..夜間資源專門執行程式.. 或給db作trigger....
10/29 20:52, 11F

10/29 20:54, , 12F
交易不許可..就只好用thread.join來硬作..不過不建議..
10/29 20:54, 12F

10/30 11:39, , 13F
我覺得問題在你的list清單吧。thread沒結束沒辦法gc阿
10/30 11:39, 13F

10/30 11:41, , 14F
list小一點,多執行幾次。thread結束再喚起。或是用pool
10/30 11:41, 14F

10/30 13:18, , 15F
噢可能我沒有用 Thread Pool 讓 Thread 重複利用 QQ
10/30 13:18, 15F
文章代碼(AID): #1AwI7BXt (java)
文章代碼(AID): #1AwI7BXt (java)