今天我碰上了传说中的堆溢出

加班太晚 随便写写我的沙币bug

今天碰到一个需求,基本内容如下:
前端今天跑过来和我说,他用的echars里面的图表组件做一个多个项目的折线图,里面的数据存放是一个数组(这个数据听他说要是固定长度的,意思就是我接口里面的数据不够)。然后我翻数据库发现,有些月份就是没有数据。但是没有数据的话前端处理起来会很麻烦。
我就想着没有的数据我给你补0吧,然后发现如果这个需求用sql来写的话,sql会很丑。而且mysql里面没有全链接这个函数,要想做到全链接,只能左外连接union右外连接。再加上我只能自己建一个临时数据视图(就是用select union select 生成一个有十二个月的表)这样整个sql又臭又长。
我就在业务层将数据加工,我想的是遍历从dao层取出来的数据,写个for循环遍历一下里面的数据,如果没有的数据我就new一个实体类对象 然后add进去。
就这个for循环给我报了堆溢出。然后我就自己搁哪琢磨啊 咋回事啊。dao层取出来的数据肯定不超过20条(测试时候用的测试数据库),再加上里面的一层月份循环,加起来撑死循环两百次,new两百个对象就堆溢出了?
然后我做死得找就是找不着,但是感觉自己的逻辑没错啊。
想不明白之后就去写,kmz(谷歌的地图数据)的文件解析去了。突然写着写着金光一闪———我知道了。我最外层for循环是根据list来的(foreach),但是我又在第二层for循环的时候 对list进行了add。那么这个list的长度肯定跟我从dao层取数据时候的list的size不一样,而且无法预估这个list的长度。一边list.foreach,一边list.add,差不多就是个死循环了。
解决方法也很简单,找个变量接收一下dao层取出来的时候的list的长度,再用fori的方式做外层for循环。


但是今天加班是因为vue太难了

-----啥也不是睡觉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值