jpa批量处理大对象,内存溢出的问题

几天前,遇到了一个问题,从发现到解决,耗费了好几天,写一遍博客,记录下经过;

任务描述:将mysql存储的第三方数据,迁移到mongodb;

问题描述:数据迁移过程中,运行到大概1万多条的时候, 突然报java.lang.OutOfMemoryError: Java heap space

解决过程:因为第三方数据过大,通讯录记录可以达到几十兆,起初认为,新生成的大对象因为数据过大,无法保存于新生代中,只能保存在老年代中,而老年代的清除周期要比新生代周期长很多,所以内存的积累导致了最后的内存溢出(实际这个想法完全不合理,如果是可清除的内存,在内存不够的情况下,jvm会执行FullGC,不会出现内存溢出的情况)。

基于以上考量,就在for循环中手动加上System.gc(),可是仍然没有效果,然后在每隔一段时间,加上Thread.sleep(),仍然没有效果;

所以,基本可以确定,一定是有什么引用没有清除,导致了最后的内存溢出

此时使用万能的度娘搜索了一个插件,并安装

打开本地的命令窗口:jmap -dump:live,format=b,file=/opt/soft/heap_cms_1024.hprof 10628

备注:1、/opt/soft/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值