java.lang.OutOfMemoryError:GC overhead limit exceeded
在调测程序时报 java.lang.OutOfMemoryError:GC overhead limit exceeded 错误 错误原因:在用程序进行数据切割时报了该错误。由于在本地执行数据切割测试的时候,数据量较小,并没有发生异常, 可以正常执行。由于在现网的数据库的数据量较大,在切割一张数据库表数据时,数据量有四千多万条,程序执行的逻辑是 先将其查询出来放入集合当中,然后批量插入,由于数据量太大,new了一个集合容纳不了,就会报内存溢出的错误。在网上 查了以后,列出一下的解决方案: 第一个方法:分批次查询,分批次入库,将集合的数据量固定在一万条左右,每次操作一万条数据,分批次操作 第二个方法:设置虚拟机内存大小,方法如下: 解决办法: 1、增加参数,-XX:-UseGCOverheadLimit 2、增加heap大小 在catalina.bat最前面加入set JAVA_OPTS=-Xms512m -Xmx1024m 解释一下各个参数: -Xms1024M:初始化堆内存大小(注意,不加M的话单位是KB) -Xmx1029M:最大堆内存大小 -XX:PermSize=256M:初始化类加载内存池大小 -XX:MaxPermSize=256M:最大类加载内存池大小 -XX:MaxNewSize=256M:tomcat对自身堆栈的新的最大的分配;当tomcat内存不足时,调用此分配