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

 

转载于:https://www.cnblogs.com/huch/p/6856395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值