java.lang.OutOfMemoryError: GC overhead limit exce

 

在项目中,在子线程中出现:java.lang.OutOfMemoryError: GC overhead limit exceeded ,而是用exception进行无法捕获异常,因为属于Error,所以只能是用Throwable进行捕获。

java.lang.OutOfMemoryError: GC overhead limit exceeded 

        at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1022) 

        at org.apache.commons.io.IOUtils.copy(IOUtils.java:999) 

        at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:218) 

        at org.apache.commons.io.FileUtils.readFileToByteArray(FileUtils.java:995) 

........................... 

修改方法:


    scheduledService = new ScheduledThreadPoolExecutor(1);

        ReBuildJob job = new ReBuildJob();

        job.setUncaughtExceptionHandler( new UncaughtExceptionHandler(){

            @Override

            public void uncaughtException(Thread t, Throwable e) {

                logger .error("Thread down, name:'{}', Exception {}" ,t.getName(), e);

            }

        });

       

        scheduledService .scheduleAtFixedRate(job, UnicornConstant.TIMER_DELAY ,

                UnicornConstant. TIMER_INTERVAL , TimeUnit. MILLISECONDS);

 

使用Throwable e进行捕获

  for (File file : cssFiles) {

            try {

                iteratorHandle(resourceReader, file, versionList);

            } catch (Throwable e) {

                logger.error( "Note: load css file '{}' exception, {}" , file, e);

            }

        }

 

其他建议:

java.lang.OutOfMemoryError: GC overhead limit exceeded解决

 

一、异常如下:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

二、解释:

JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。

一般是因为堆太小。导致异常的原因:没有足够的内存。

三、解决方案:

 

1、查看系统是否有使用大内存的代码或死循环。

2、可以添加JVM的启动参数来限制使用内存:-XX:-UseGCOverheadLimit

 


转载于:https://my.oschina.net/liuhuan0927/blog/657900

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值