日期:2014-05-20  浏览次数:20878 次

关于多线程添加数据的问题+散分
我用多线程添加数据,大概有10万多条吧。每10000条数据commit一次,同时休息5秒钟。

最开始的十几分钟,可以达到每秒100,200左右,然后随着时间延长,后边基本上就是每10秒添加1条,可能会更慢,我没等,直接关了。

以前报过堆溢出,肯定是对象太多了,后来在设置里改大了内存。里边用到的对象,用完之后都让对象等于null了,还加上了gc(),虽然不能让系统马上清理,但是希望系统能及时清理垃圾。

请问还有什么办法能减少资源的消耗么?

谢谢。

大概的过程是,读txt文件->生成10万个对象->关txt文件,循环读取对象,生成insert的sql语句,执行sql语句。


------解决方案--------------------
你读取就生成100000个对象?需要一个就生成一个对象啊,再就是我做多线程都卡死线程数
------解决方案--------------------
读一行数据添加一条,这样就不至于同时有那么多对象在内存啊
------解决方案--------------------
几个建议:
1. 两个线程,一个读文件,一个写SQL
2. 用ArrayBlockingQueue作为中介,限制对象分配数量
3. 读文件的线程只管往ABQ里放object,写SQL的只管从ABQ里拿
4. 减少commit的大小,你现在是10000,改成500试试(这个我没把握,不过应该会减少资源消耗)
5. 不需要睡5秒
6. 不要调用gc
7. 不要调用gc
8. 不要调用gc
9. 不要调用gc
10.不要调用gc