java.lang.OutOfMemoryError: GC overhead limit exceeded

 

在項目中,在子線程中出現:java.lang.OutOfMemoryError: GC overhead limit exceeded ,而是用exception進行無法捕獲異常,因爲屬於Error,所以只能是用Throwable進行捕獲。

  1. java.lang.OutOfMemoryError: GC overhead limit exceeded 
  2.         at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1022
  3.         at org.apache.commons.io.IOUtils.copy(IOUtils.java:999
  4.         at org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:218
  5.         at org.apache.commons.io.FileUtils.readFileToByteArray(FileUtils.java:995
  6. ........................... 

修改方法:

   
 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章