在写定时任务时,对表数据进行批量操作,测试数据有10万条左右,在测试时发现跑着跑着出现内存溢出现象,最后发现创建的对象paramList 和tmBeanList没有被回收,经过资料查找,发现是循环内不要不断创建对象引用,不然有count次循环,内存中就有count份对象引用存在,就耗费内存了,所以每次循环完都得对对象引用进行销毁(设置为null);或直接在for循环体外声明对象,在循环体内创建对象的引用,这样内存中只有一份对象引用,每次new对象时,对象引用指向不同,但内存中只有一份。

/*** 定时任务,xxxx* @author xxx* @date xxx* @version xxx*/
@Component(value = "xxxJob")
public class xxxJob {@Transactionalpublic void doService(Map<String, Object> scheduleJob) {logger.info("------------开始定时任务,xxxxx----------");// 业务逻辑---省略业务代码---for (Map<String, Object> map : list) {try {---省略业务代码---List<Map<String, Object>> tmBeanList = tMemberRfmDao.queryBeanForMap(tmr);List<Map<String, Object>> paramList = new ArrayList<>();if (!CollectionUtils.isEmpty(tmBeanList)) {---省略业务代码---for (Map<String, Object> member : tmBeanList) {String memberId = (String) member.get("member_id");Map<String, 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();    }

转载于:https://www.cnblogs.com/huangrenhui/p/11365141.html

自己挖的坑自己填--JVM报内存溢出相关推荐

  1. 五种内存溢出案例总结:涵盖栈深度溢出、永久代内存溢出、本地方法栈溢出、JVM栈内存溢出和堆溢出

    大家好,我是冰河~~ 相信小伙伴们在平时工作的过程中,或多或少都会遇到一个场景:内存溢出.如果你没有遇到过这个场景,那就说明你是个假的程序员.哈哈,开个玩笑,平时工作过程中,我们确实会遇到这个问题.今 ...

  2. android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

    android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法 原方法: public static Bitmap getSmallBitmap(Strin ...

  3. Tomcat启动报内存溢出错误解决(两种)

    1.绿色版Tomcat,启动报内存溢出错误:java.lang.OutOfMemoryError: PermGen space异常 找到D:\Tomcat-7\apache-tomcat-7.0.28 ...

  4. php报内存溢出,php为什么运行了一段时间后才报内存溢出?

    我一次性从数据库读取了10万条数据,然后循环做一些计算,循环过程中,涉及到的变量都会被下次循环覆盖掉,现在的情况是程序运行了一段时间之后,报内存溢出,为什么不是刚开始的时候就报内存溢出?按照我的理解, ...

  5. jmeter报告中定义的吞吐量、jmeter报内存溢出问题

    jmeter的吞吐量认为完全等于LR的TPS并不严谨,严格意义来讲应该是交易成功率为100%,或者交易失败率在你可以接受的范围内(对当前测试整体结果影响不大,到了可以忽略的程度). 当失败率较大时,j ...

  6. C#编写大计算量程序总是报内存溢出System.OutOfMemoryException的重要原因

    笔者为C#业余爱好者,从开始编写一些计算量较大.内存占用较大的程序时,经常会在编译时报出System.OutOfMemoryException(内存溢出)的错误异常,而实际上,当时的剩余内存还多的是, ...

  7. git安装 苹果笔记本_自己挖的坑自己填,无光驱安装苹果笔记本双系统

    苹果笔记本是2012年买的古董了,虽然增加到了16G内存,更换了固态硬盘,一次又一次的焕发了他的青春,无奈由于年岁太大,心脏(CPU)已经不堪重负,速度越来越慢.为了可以更换固态硬盘实现双硬盘,把光驱 ...

  8. java 图片 内存溢出_Java修改图片尺寸,总是报内存溢出怎么解决?

    项目需求:有很多尺寸很大的图片(图片大小可能几十MB,甚至上百MB),需要等比例缩小它们的尺寸,相当于生成缩略图. 例如:原图8268x6201,需要压缩成400x300. 我现在的方法:将图片整个读 ...

  9. java运行内存溢出指什么内存溢出_项目正常启动,但是在访问页面的时候java报内存溢出错误。。小感悟...

    先说一下背景,前两天由于本地的oracle数据库问题,导致项目启动数据库获取连接池错误,不能正常启动,折腾了一段时间,本地数据库整好了,想在本地把项目跑起来试试,把项目部署在tomcat正常启动,但是 ...

最新文章

  1. 421. Maximum XOR of Two Numbers in an Array——本质:利用trie数据结构查找
  2. 【Android 返回堆栈管理】打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task
  3. 备份文件命令SqlServer一键复制数据库脚本
  4. Java中final和static对修饰类、方法、属性的总结
  5. 删除 多个表_合并汇总多个工作簿多个工作表,删除修改新增更新内容只需刷新...
  6. windows2008不能显示图片缩略图设置
  7. 儿歌-宝宝学唱儿歌 ios版
  8. Racket 学习笔记
  9. VMware vCenter Server“具有外部PSC”架构调整为“具有嵌入式PSC”架构
  10. 滴滴开源基于金融场景的Vuejs组件库Mand Mobile
  11. Python界面设计之Label
  12. 触碰岁月——土楼潇洒穷游记
  13. 英文参考文献按照首字母排序使用matlab实现
  14. 2017 年终总结 —— 在路上
  15. java中expand用法_Rxjs expand的用法分析
  16. 自适应螺旋飞行麻雀搜索算法
  17. 基于自学习的机器人决策系统(达闼科技赵开勇)
  18. AIOT时代来临,物联网平台(IoT Platform)真有那么重要吗?
  19. 自动获取/更新HTTPS证书并实现Nginx代理WSS协议
  20. linux自带i2c工具使用

热门文章

  1. es-04-mapping和setting的建立
  2. DAY4-打卡第四天-2018-1-12
  3. PHP 使用POST 获取不到部分数据问题
  4. restful-api最佳实践
  5. Hadoop 2.X 从入门到精通系列视频课程套餐
  6. 系统设计 - 使用面向 iOS 的本机插件扩展
  7. shell 学习笔记(18)
  8. 不完全恢复分类与命令
  9. C#调用WebService出现“基础连接已经关闭:接收时发生错误”错误
  10. 数据结构之——队列与循环队列