resultSet.next() 位置处报错:java.lang.OutOfMemoryError: Java heap space

在一个供应商数据同步接口运行过程中,突然发现会抛出:java.lang.OutOfMemoryError: Java heap space,内存溢出,按日志指示,找到了报错位置,当执行while (resultSet.next()) 时,就直接报错,程序中断了。

......
// 获取结果集
prepareStatement = connection.prepareStatement(selectSqlString);
if (!Checker.isEmpty(lastFinishTime)) prepareStatement.setString(1, lastFinishTime);
		
resultSet = prepareStatement.executeQuery();
resultSet.setFetchSize(DEFAULT_FETCH_SIZE);
selectSqlString = null;
// 处理结果集
......

处理方法相对粗暴一点儿,将DEFAULT_FETCH_SIZE的默认值设置的小一些,之前是10000,现在改成了5000,就不会报错了。

setFetchSize()方法可以设置每次查询的数量,当数据量较大时,可以提交处理效率。另外,通常也设置一个DEFAULT_EXECUTE_SIZE,即没多少条结果集执行一次。之前是每次取10000条,1000条执行一次插入;现在更新为每次取5000条,每500条执行一次插入。

另外,调整虚拟机参数应该也能解决这个问题,暂时没有测试。但是内存再大,也怕数据量大到吃不消,所以还是设置相对合理的参数,来让程序更加高效的运行更好。

发布了92 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41885819/article/details/103135570