常见的异常

常见的异常

文章目录

  • 常见的异常
      • 1.相关错误和异常
      • 2. Error 和 Exception 区别是什么?

1.相关错误和异常

错误:

  • StackOverflowError:栈满会抛出该错误。无限递归就会导致StackOverflowError
  • OOM—Java heap space:堆满会抛出该错误。
  • OOM—GC overhead limit exceeded:正常情况是GC只会占到很少一部分时间。但是如果用超过98%的时间来做GC,而且收效甚微,就会被JVM叫停。下例中,执行了多次Full GC,但是内存回收很少,最后抛出了OOM:GC overhead limit exceeded错误。
  • OOM—GC Direct buffer memory:使用native方法,直接在堆外分配内存。当堆外内存(也即本地物理内存)不够时,就会抛出这个异常。
  • OOM—unable to create new native thread:在高并发应用场景时,如果创建超过了系统默认的最大线程数,就会抛出该异常。Linux单个进程默认不能超过1024个线程。解决方法要么降低程序线程数,要么修改系统最大线程数vim /etc/security/limits.d/90-nproc.conf
  • OOM—Metaspace:元空间满了就会抛出这个异常。元空间就是以前的永久代,区别是原空间不占用虚拟机内存,而是直接占用物理内存,元空间就是线程共享的方法区,里面存放的是1、虚拟机加载的类信息。2、常量池。3、静态变量。4、即时编译后的代码

异常:

  • 并发修改异常:ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException异常。

  • **RejectedExecutionException拒绝执行异常:

    调用new ThreadPoolExecutor(0, Integer.MAX_VALUE,
    60L, TimeUnit.SECONDS,
    new SynchronousQueue());创建一个线程池,采用默认的拒绝策略的时候。若进入线程池的线程超过能容忍的最大线程数的时候。会爆出拒绝执行异常。RejectedExecutionException

    AbortPolicy**:默认的策略,直接抛出RejectedExecutionException异常,阻止系统正常运行。当等待队列满时,且达到最大线程数,再有新任务到来,就需要启动拒绝策略

2. Error 和 Exception 区别是什么?

  • Error 类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测,JAVA 应用程序也不应对这类错误进行捕获,一旦这类错误发生,通常应用程序会被终止。
  • Exception 类的错误是可以在应用程序中进行捕获并处理的

你可能感兴趣的:(JAVA)