某天,在一次新的需求讨论中,用户提出想要通过页面导出数据到excel,由于之前有使用poi导出数据到excel,所有在当时同意了这个需求。分析会后找dba拿取sql的时候,突然得知数据的数量级有几十万,心中一阵懵逼。
第一次尝试:抱着侥幸的心理,依旧使用之间poi导出的方式,果然坑就在那,饶是绕不过去的,报错了tomcat:java.lang.OutOfMemoryError: Java heap space,内存溢出。百度了一下说是list集合一次获取数十万条数据,放不下了。
第二次尝试:既然一次去几十万取不出来,那我分开获取数据呗,通过和dba的沟通,成功的实现每次获取10000条数据。恩,再次进行尝试---------还是同样的错误。静下心来缓缓,吃颗糖压压惊。选择在查询数据库前,list取值中,取值完成后,分别输出系统剩余freememory,发现了在list取值的过程中,可使用缓存急遽的下降直到报错。
第三次尝试:拿着问题去寻找答案,经过搜索资料,各种实验,最终得出,在使用完成集合时,要及时清楚集合的缓存,主动调用垃圾回收。并且选择使用SXSSFWorkbook,恩,数据顺利的导出到了excel。
下面是下载链接:https://download.csdn.net/download/qqweede/10420893