首页 > 编程语言 >(四)Java异常

(四)Java异常

时间:2023-01-09 11:11:16浏览次数:45  
标签:Java JVM XX 内存 heap 异常

Java异常

1、运行时异常

运行时异常都是 RuntimeException 子类异常

  • NullPointerException - 空指针异常

  • ClassCastException - 类转换异常

  • IndexOutOfBoundsException - 下标越界异常

  • ArithmeticException - 计算异常

  • IllegalArgumentException - 非法参数异常

  • NumberFormatException - 数字格式异常

  • UnsupportedOperationException 操作不支持异常

  • ArrayStoreException - 数据存储异常,操作数组时类型不一致

  • BufferOverflowException - IO 操作时出现的缓冲区上溢异常

  • NoSuchElementException - 元素不存在异常

  • InputMismatchException - 输入类型不匹配异常

2、OutOfMemoryError原因

OutOfMemoryError 分为多种不同的错误:

  • Java heap space

原因:JVM 中 heap 的最大值不满足需要 解决: 调高 heap 的最大值,-Xmx 的值调大 如果程序存在内存泄漏,增加 heap 空间也只是推迟该错误出现的时间而已,要检查程序是否存在内存泄漏

  • GC overhead limit exceeded

原因:JVM 在 GC 时,对象过多,导致内存溢出 解决:调整 GC 的策略,在一定比例下开始GC而不使用默认的策略,或将新代和老代设置合适的大小,可以微调存活率。如在老代 80% 时就是开始GC,并且将 -XX:SurvivorRatio(-XX:SurvivorRatio=8)和-XX:NewRatio(-XX:NewRatio=4)设置的更合理

  • Java perm space

原因:JVM 中 perm 的最大值不满足需要,perm 一般是在 JVM 启动时加载类进来 解决:调高 heap 的最大值,即 -XX:MaxPermSize 的值调大解决。如果 JVM 运行较长一段时间而不是刚启动后溢出的话,很有可能是由于运行时有类被动态加载,此时可以用 CMS 策略中的类卸载配置解决如:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

  • unable to create new native thread

原因:当 JVM 向系统请求创建一个新线程时,系统内存不足无法创建新的 native 线程 解决:JVM 内存调的过大或者可利用率小于 20%,可以将 heap 及 perm 的最大值下调,并将线程栈内存 -Xss 调小,如:-Xss128k

  • Requested array size exceeds VM limit

原因:应用程序试图分配一个大于堆大小的数组 解决: 检查 heap 的 -Xmx 是不是设置的过小 heap 的 -Xmx 已经足够大,检查应用程序是不是存在 bug 计算数组的大小时存在错误,导致数组的 length 很大,从而导致申请巨大的数组

  • request XXX bytes for XXX. Out of swap space

原因:从 native 堆中分配内存失败,并且堆内存可能接近耗尽,操作系统配置了较小的交换区,其他进程消耗所有的内存 解决:检查操作系统的 swap 是不是没有设置或者设置的过小;检查是否有其他进程在消耗大量的内存,导致 JVM 内存不够分配

3、运行时异常与受检查异常的异同

1)运行时异常,表示程序代码在运行时发生异常,程序代码设计的合理,这类异常不会发生

2)受检查异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发

3)Java编译器要求方法必须声明抛出可能发生未被捕获的受检查异常,不要求必须声明抛出运行异常

4、异常的设计原则

  • 不要将异常处理用于正常的控制流

  • 对可以恢复的情况使用受检异常,对编程错误使用运行时异常

  • 避免不必要的使用受检异常

  • 优先使用标准的异常

  • 每个方法抛出的异常都要有文档

  • 保持异常的原子性

  • 不要在 catch 中忽略掉捕获到的异常

5、Java异常的结构

Throwable

--Error:是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题

--Exception:

--RuntimeException:运行时异常,编译通过了,但运行时出现的异常

--非 RuntimeException:编译时(受检)异常,编译器检测到某段代码可能会发生某些问题,需要程序员提前给代码做出错误的解决方案,否则编译不通过

标签:Java,JVM,XX,内存,heap,异常
From: https://www.cnblogs.com/it-java-ls/p/17036419.html

相关文章

  • JavaScript 性能优化
    1.内存管理内存管理介绍内存:由可读写单元组成,表示一片可操作空间管理:人为的去操作一片空间的申请、使用和释放内存管理:开发者主动申请空间、使用空间、释放空......
  • Java方法
    方法System.out.println();//是什么吗?//系统类+对象+方法Java方法是一对语句的集合,他们一起负责执行一个功能方法是解决一类问题的步骤的有序组合方法包含于......
  • 37、商品服务--品牌管理--统一异常处理
    如果每一个controller方法获取到异常之后,都像上一节那样写那么多代码处理,太麻烦,所以我们抽取进行统一异常处理。我们的controller代码又变得简洁了创建一个exception包,......
  • 让 Java Agent 在 Dragonwell 上更好用
    本文是《容器中的Java》系列文章之3/n,欢迎关注后续连载 ......
  • 连号区间数java
    小明这些天一直在思考这样一个奇怪而有趣的问题:在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间[L,R]里的所有元素(即此排列的第L个到第R个元......
  • 10(结构型模式)java设计模式之代理模式
    一、什么是代理模式简介:代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。为其他对象提供—种代理以控制对这个对象的......
  • Java基础语法
    之前学习java记得笔记,但是一直没怎么遇到java类的题,平时也不用java,所以经常忘记,今天想起来了再看一遍,再把之前写的笔记整理整理发到博客上。Java预学习Jave的优势从互联......
  • JavaWeb三大组件之过滤器-Filter
    1.Filter过滤器Filter过滤器是javaEE的规范,是接口(javax.servletInterfaceFilter) 2.过滤器作用-拦截请求,过滤响应情景引入:浏览器访问tomcat的login页面,进行登录验证......
  • 客服系统前端开发:JavaScript删除对象数组中指定key value的对象【唯一客服】网页在线
    经常我们有这样的需要,比如有一个对象数组,我们要把这个数组里某个对象删除掉,根据他的某一个key的value来删除可以使用JavaScript的filter()方法来删除对象数组中指定k......
  • VsCode里面在JavaWeb项目里面配置Maven环境详解
    1、在之前已经新建完成一个JavaWeb项目的基础上开始2、设置里面搜索Maven,找到这个,然后进行定位3、将TomcatServer配置进去(右上角有一个加号)(对于已经学过Java的并不难......