作者icecastleo (酷捏)
看板java
标题Re: [虫?] While(ture)回圈中断
时间Thu Oct 29 13:02:01 2009
昨天的程式跑到今天早上又结束了
後来发现是 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
1F:推 PsMonkey:请不要用「--」当分隔线 10/29 13:42
2F:推 PsMonkey:其他的... 我想你自己作测试 or 找软体帮你测试就知道了 10/29 13:43
3F:→ PsMonkey:我会猜你的问题出在 news 超级大,还有 10/29 13:43
4F:推 PsMonkey:下次别再轻易说「没有错误讯息」这种事情了... [叹气] 10/29 13:43
5F:→ kanandg1:板友都有超直觉XD (误 10/29 13:50
抱歉改掉分隔线了
我的 News 只有几个 private 栏位 跟Get 的 Method
我想我在去找找其他地方好了
所以 Out of Memory 太多次
JVM就会强制关闭我的程式吗?
我可能没搞懂 我以为Thread造成的 Exception 有处理的话
主程式还是不会自动结束 所以我说主程式没有错误讯息 > <
※ 编辑: icecastleo 来自: 218.167.7.129 (10/29 14:04)
6F:→ kanandg1:您有处理OutOfMemoryError的话,程式是不应直接结束没错 10/29 14:37
7F:→ adrianshum:楼上: 正常来说 OutOfMemoryError 不该也没法处理 10/29 14:53
8F:→ kanandg1:我比较相信是一般人不会去处理这个^^" 10/29 15:05
9F:→ jej:以前用hibernate作过累似的事情.. 要insert1000万笔资料... 10/29 20:47
10F:→ jej:分公司的交易.. 一笔一笔作就等着outofmemory.. 两种作法.... 10/29 20:50
11F:→ jej:交易许可..夜间资源专门执行程式.. 或给db作trigger.... 10/29 20:52
12F:→ jej:交易不许可..就只好用thread.join来硬作..不过不建议.. 10/29 20:54
13F:→ MonyemLi:我觉得问题在你的list清单吧。thread没结束没办法gc阿 10/30 11:39
14F:→ MonyemLi:list小一点,多执行几次。thread结束再唤起。或是用pool 10/30 11:41
15F:→ icecastleo:噢可能我没有用 Thread Pool 让 Thread 重复利用 QQ 10/30 13:18