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


本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/1102778,如需转载请自行联系原作者

相关文章
|
15天前
|
监控 算法 Java
Java GC调优详解
Java GC调优详解
30 0
|
2月前
|
算法 Java
「译文」Java 垃圾收集参考手册(四):Serial GC
「译文」Java 垃圾收集参考手册(四):Serial GC
|
2月前
|
Java 开发者 iOS开发
8 种 Java- 内存溢出之二 -GC overhead limit exceeded
8 种 Java- 内存溢出之二 -GC overhead limit exceeded
|
2月前
|
算法 安全 Java
「译文」Java 垃圾收集参考手册(三):GC 算法基础篇
「译文」Java 垃圾收集参考手册(三):GC 算法基础篇
|
2月前
|
算法 Java
「译文」Java 垃圾收集参考手册(五):Parallel GC
「译文」Java 垃圾收集参考手册(五):Parallel GC
|
12天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
21小时前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
7 0
|
5天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
5天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
6天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。