在写定时任务时,对表数据进行批量操作,测试数据有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(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();
}

自己挖的坑自己填--JVM报内存溢出的更多相关文章

  1. JVM:内存溢出OOM

    JVM:内存溢出OOM 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 经典错误 JVM 中常见的两个 OOM 错误 StackoverflowError:栈溢出 ...

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

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

  3. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  4. spring boot启动报内存溢出的问题

    问题: springBoot项目,已经两次了,启动报内存溢出,内存泄露 分析: 内存泄露是因为垃圾回收器想要回收程序不用的对象,但是该对象还有引用存在 解决: 1.第一次是mybatis文件和Java ...

  5. 对jvm虚拟机 内存溢出的思考

    java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间

  6. Jmeter报内存溢出解决方案

    描述:wimdows环境,做上传图片接口测试,涉及图片合成和上传,图片采用base64编码.每1s启动200线程的时候,Jmeter报内存溢出错误. 解决方案: 1.修改jmeter.bat: set ...

  7. Java8虚拟机(JVM)内存溢出实战

    前言 相信很多JAVA中高级的同学在面试的时候会经常碰到一个面试题 你是如何在工作中对JVM调优和排查定位问题的? 事实上,如果用户量不大的情况下,在你的代码还算正常的情况下,在工作中除非真正碰到与J ...

  8. Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)

    转载自https://github.com/pzxwhc/MineKnowContainer/issues/25 包括:1. 栈溢出(StackOverflowError)2. 堆溢出(OutOfMe ...

  9. (转)JVM各种内存溢出是否产生dump

    对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件.但永久代内存溢出不明确是否会生成,今天来做一个实验: 永久代 ...

随机推荐

  1. web框架-(三)Django进阶

    通过上节课的学习,我们已经对Django有了简单的了解,现在来深入了解下~ 1. 路由系统 1.1 单一路由对应 url(r'^index$', views.index), 1.2 基于正则的路由 u ...

  2. java Thread源码分析

    一.使用 java 多线程 java多线程其中两种使用方式: 1.继承 Thread 类 2.实现 Runnable 接口 public class ThreadTest { public stati ...

  3. Jmeter性能测试结果分析:响应时间为什么是下降的趋势?

    测试图数据库:边的插入,递增并发量,6000并发平均响应时间比7000的并发的平均响应时间还要大?    7000并发的99%用户响应时间是70.99,平均响应时间怎么就是38.59了?    一共两 ...

  4. H5 FileReader对象

    前言:FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件. input:file 在介绍FileReader之前,先简单介绍input的file类型. < ...

  5. Python---面向对象---龟鱼游戏

    一.定义一个门票系统 门票的原价是100元 当周末的时候门票涨价20% 小孩子半票 计算2个成人和1个小孩的平日票价 ----------------------------------------- ...

  6. Eclipse Debug模式的开启与关闭问题简析_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 默认情况下,eclipse中右键debug,当运行到设置的断点时会自动跳到debug模式下.但由于我的eclipse环境 ...

  7. unittest----skip(跳过用例)

    我们在执行测试用例时,有时有些用例时不需要执行的,这时就需要用到unittest给我们提供的跳过用例的方法 @unittest.skip(reason):强制跳过,不需要判断条件.reason是跳过原 ...

  8. 【hackerrank】Type of Triangle

    题目如下: Write a query identifying the type of each record in the TRIANGLES table using its three side ...

  9. SpringBoot整合AOP

    一.创建LogComponent类     类上加上@Component和@Aspect 表示把该类注册成spring组件和aop         二.创建6个方法     2.1     @Poin ...

  10. HTML5解决大文件断点续传

    一.概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载.在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了.一般断点下载时才用到Range和Content- ...