常见的异常

常见的异常

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 类的错误是可以在应用程序中进行捕获并处理的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值