随着信息化的推进,系统的依赖性也变的越来越强,所以各种数据不断积累,数据开发率并不高,所以数据还不能准确高效的使用,这个时候我们就需要将数据导出到Excel然后通过手工的方式进行处理,但是当讲数据库的数据查询出来的时候,发现JVM的内存持续升高,知道内存溢出,一开始我以为是list太大的原因,我将list固定到1w,然后不断循环去数据库取数据,发现问题依旧存在,没有任何改变,所以说明问题的出处,不在LIST,于是继续寻找,开始进行无用代码隔离,发现问题出现在了hibernate,仔细测试,找到了内存持续增长的地方是Query.list()方法,为了提高效率,尽可能多的占用内存,最终导致内存数据泄露,所以,我使用了最直接的方法,将list.clear()集合清空,发现没有作用,这让我很不可理解,这个返回结果直接返回一个引用,并不是真正的list,此时已经差不多半天时间过去了,问题依然没有解决,想想以前数据量小的时候,很多问题都没有出现,于是调整心态,继续查看API,发现Session情况可以解决问题,于是赶紧试试看,果然,内存在一定范围内稳定下来了,而且数据导出时间和效率明显提高,excel2007在5分钟导出100W数据到1个sheet表很轻松,问题解决了,但是依然感到很不安,原来我对hibernate知识只是了解了一个表面,很多用法还不是很理解,实现原理,实现方式还没有研究过,所以,要走的路还很长,要学的知道还很多,重新拾起自己的激情,开始努力学习吧
时间: 2024-10-10 10:30:23