资讯动态

自己挖的坑自己填--JVM报内存溢出

发布时间:2026/10/21 1:10:16 来源:尧图企业网站定制
源码仓库Gitee · GitHub在写定时任务时对表数据进行批量操作测试数据有10万条左右在测试时发现跑着跑着出现内存溢出现象最后发现创建的对象paramList 和tmBeanList没有被回收经过资料查找发现是循环内不要不断创建对象引用不然有count次循环内存中就有count份对象引用存在就耗费内存了所以每次循环完都得对对象引用进行销毁设置为null或直接在for循环体外声明对象在循环体内创建对象的引用这样内存中只有一份对象引用每次new对象时对象引用指向不同但内存中只有一份。/** * 定时任务xxxx * author xxx * date xxx * version xxx */ Component(value xxxJob) public class xxxJob { Transactional public void doService(MapString, Object scheduleJob) { logger.info(------------开始定时任务xxxxx----------); // 业务逻辑 ---省略业务代码--- for (MapString, Object map : list) { try { ---省略业务代码--- ListMapString, Object tmBeanList tMemberRfmDao.queryBeanForMap(tmr); ListMapString, Object paramList new ArrayList(); if (!CollectionUtils.isEmpty(tmBeanList)) { ---省略业务代码--- for (MapString, Object member : tmBeanList) { String memberId (String) member.get(member_id); MapString, Object tml new HashMap(); ---省略业务代码--- tml.put(data_status, 0); tml.put(create_time, DateUtils.getDate(yyyy-MM-dd HH:mm:ss)); tml.put(update_time, DateUtils.getDate(yyyy-MM-dd HH:mm:ss)); paramList.add(tml); if(paramList.size() INT_TWO_THOUSAND){ tMemberLabelDao.saveBatch(paramList); paramList.clear(); } } if(paramList.size() ! 0){ tMemberLabelDao.saveBatch(paramList); } paramList null; tmBeanList null; ---日志--- }else{ ---日志--- } } catch (Exception e) { ---异常--- } } logger.info(------------结束定时任务,xxxx); } } 备注(循环外声明对象循环体内创建对象引用Object对象引用指向不同的Object Object object null; for(int i 0;i count; i){ object new Object(); }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑