自己挖的坑自己填--JVM报内存溢出
在写定时任务时,对表数据进行批量操作,测试数据有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报内存溢出的更多相关文章
- JVM:内存溢出OOM
JVM:内存溢出OOM 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 经典错误 JVM 中常见的两个 OOM 错误 StackoverflowError:栈溢出 ...
- android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法
android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法 原方法: public static Bitmap getSmallBitmap(Strin ...
- .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)
.NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...
- spring boot启动报内存溢出的问题
问题: springBoot项目,已经两次了,启动报内存溢出,内存泄露 分析: 内存泄露是因为垃圾回收器想要回收程序不用的对象,但是该对象还有引用存在 解决: 1.第一次是mybatis文件和Java ...
- 对jvm虚拟机 内存溢出的思考
java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间
- Jmeter报内存溢出解决方案
描述:wimdows环境,做上传图片接口测试,涉及图片合成和上传,图片采用base64编码.每1s启动200线程的时候,Jmeter报内存溢出错误. 解决方案: 1.修改jmeter.bat: set ...
- Java8虚拟机(JVM)内存溢出实战
前言 相信很多JAVA中高级的同学在面试的时候会经常碰到一个面试题 你是如何在工作中对JVM调优和排查定位问题的? 事实上,如果用户量不大的情况下,在你的代码还算正常的情况下,在工作中除非真正碰到与J ...
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread)
转载自https://github.com/pzxwhc/MineKnowContainer/issues/25 包括:1. 栈溢出(StackOverflowError)2. 堆溢出(OutOfMe ...
- (转)JVM各种内存溢出是否产生dump
对于java的内存溢出,如果配置-XX:+HeapDumpOnOutOfMemoryError,很明确的知道堆内存溢出时会生成dump文件.但永久代内存溢出不明确是否会生成,今天来做一个实验: 永久代 ...
随机推荐
- c调用c++
g++ main.c math.cpp math.h中加入extern "C"
- Sublime3 配置node.js 环境 The process "node.exe" not found
配置中文显示调试结果 [下载地址](https://github.com/tanepiper/SublimeText-Nodejs) 1. 到上述地址下载压缩文件 2.将文件解压到sublime的插件 ...
- pycharm设置SDK
1.一看到这个提示,就知道Pycharm中尚未配置Python解释器,此时不用慌,并不是Pycharm没有安装成功,而是因为有个配置尚未完成,只需要配置好Python解释器之后,一切都会正常.其实Py ...
- POJ-2516-Minimum Cost(网络流, 最小费用最大流)
链接: https://vjudge.net/problem/POJ-2516 题意: Dearboy, a goods victualer, now comes to a big problem, ...
- 046:ORM模型介绍
ORM模型介绍: 随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了: 1.SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长.会出现很多相近的SQL ...
- IIS部署复盘(杂记)
首先,230是网站服务器,231主要放到是数据库:所以在230(部署的服务器)上部署不需要部署IIS和Oracle数据库, 231呢?231是数据库服务器:百度一下数据库服务器是什么? 文档第五步: ...
- mysql OR运算符 语法
mysql OR运算符 语法 作用:在 WHERE 子语句中把两个或多个条件结合起来. 语法:SELECT * FROM 表名 WHERE 字段1 运算符 值 OR 字段2 运算符 值 说明:如果第一 ...
- [USACO08FEB]Hotel 题解
正确的题解 首先我们都知道这题要用线段树做.考虑维护靠左边的answer,靠右边的answer,和整个区间的answer,那么就珂以维护这道题目了. 这里比较复杂的有下传操作和上传操作. 上传 voi ...
- C++ 对象间通信框架 V2.0 ××××××× 之一
V2.0 主要是信号槽连接的索引性能做了改进,新设计了程序构架实现了多级分层索引,索引时间性能基本不受连接表的大小影响. 类定义:CSignalSlot C_MemberFuncPointer C_s ...
- Mac下配置神器PhpStrom开发环境
转载自:http://www.ifun.cc/blog/2014/02/09/macxia-pei-zhi-shen-qi-phpstromkai-fa-huan-jing/ php这么流行,不能不研 ...