java.lang.OutOfMemoryError:Java进行大数据量查询内存溢出

1):今天进行库存查询,select * from  table  查询出来的数据量只有2万多条,却报了内存溢出的错误,于是采用了分页的方式进行读取。

       方法之一:在连接MySQL的URL后加两个参数:useCursorFetch=true&defaultFetchSize=100

完整形式如:jdbc:mysql://192.168.1.252:3306/lims?useUnicode=true&charsetEncoding=utf8&useCursorFetch=true&defaultFetchSize=100

此方法只针对mysql有效

       方法之二:分页:int totalCount = parnterSV.queryPartnerInfoForDealerCount(condition.toString(), infomap);
int beginIdx=1;
int returnCount=0;
while(beginIdx<=totalCount){
IBOPartnerInfoValue[] dealers =parnterSV.queryPartnerInfoForDealer(condition.toString(), infomap,beginIdx,beginIdx+5000);
if(dealers!=null&&dealers.length>0){
returnCount=dealers.length;

beginIdx=beginIdx+returnCount

}

问题解决!!?

但是另外一条查询select t.code  from table t 返回6万多条语句,都没有报内存溢出的问题。感到很奇怪。于是想了想,分页是解决jvm垃圾回收机制运作没有new 对象(变量) 和释放对象的速度快导致的(虚拟机分配的到堆内存空间已经用满了),那么2万多条就内存溢出了,6万多条的都没事,是不是因为select  *的问题??     于是select  * 改成 某几个字段,果然不报错了。奉劝大家进行大数据查询的时候尽量只select有用的数据。

2):在1)中,通过分页,不断释放jvm内存达到优化,但是对于大数据量的多层分组是不能进行分页的,怎么办呐?以下别人的解答:http://blog.tianya.cn/post-3530792-31964150-1.shtml

 

posted @ 2017-05-15 14:59  胡图咦声  阅读(4453)  评论(0编辑  收藏  举报