码迷,mamicode.com
首页 > 其他好文 > 详细

内存溢出解决思路

时间:2019-09-30 23:24:34      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:搜索   ext   对象创建   text   本地   记录   cal   对象   经验   

内存溢出问题解决思路

 

这篇文章主要说下解决思路,当然也写出了对应的业务背景。用意呢,一是想记录问题处理过程,作为以后的经验;二呢,分享给大家,可以听听故事借鉴下。

开始了。

 

项目报错什么错呢?

  java.lang.OutOfMemoryError: Java heap space

  java.lang.OutOfMemoryError: GC overhead limit exceeded 

 

报错的业务功能是:

  导出数据为加密的EXCEL文档。

  也就是 把10万条数据从数据库读出来,放到excel表格中,再放到内存中,对表格进行加密处理,最后返回文件流。

 

当时背景是:

  本地idea运行没问题,部署到服务器却出现上面的内存溢出ERROR

 

于是我分析:

  方向一:程序代码有问题,对象创建太多。10万行*5=50万个单元格对象,可能是多了。于是用分页查询数据的方式,10万条数据分为20次,即每次查询5000条数据,分批放进sheet对象中。然而这样做并没啥卵用。

 

  方向二:JVM扩容。把原来启动参数-Xms256M -Xmx512M,扩大到7681024,于是问题解决了,不报内存溢出了。

      但是!治标不治本,这个程序的内存是扩大了,但有可能影响别的程序正常使用。

      于是再百度搜各种poi内存溢出问题”,终于找着内存溢出的根本原因了。原来,是我用的POI版本太低了,高版本POI已经解决了内存溢出的问题,即通过限定内存中到达一定行数时清空内存的方式。

 

  原来一直用的百度关键字要么是“java.lang.OutOfMemoryError”,要么是“GC overhead limit exceeded”,而换个关键词“poi内存溢出问题” 去搜索,答案 早已有前辈po出。

 

总结一下,遇到问题,要多方面考虑原因,然后根据可能的具体原因去百度搜,不然就像大海捞针。

 

内存溢出解决思路

标签:搜索   ext   对象创建   text   本地   记录   cal   对象   经验   

原文地址:https://www.cnblogs.com/one-gril/p/11614237.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!