深入理解JVM的一个重要目的就是解决实际生产中的出现的异常,并能从根上处理问题。JVM定义的异常有哪些呢?见下表:

    

  除了计数器未定义异常,其他都会有OutofmemoryError的异常,下面就实战这几个部分的异常:

  一、Java heap溢出异常    

    堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾收集回收机制清除这些对象,当这些对象所占空间超过最大堆容量时,就会产生 OutOfMemoryError 的异常。

    

    

    堆溢出异常常见原因 如下:

      1、内存中加载的数据过多,如一次从数据库中取出过多的数据;

      2、集合对对象引用过多且使用完后没有清空;

      3、代码中存在死循环或循环产生过多重复对象;

      4、堆内存分配不合理。

    示例中内存溢出属于第三种,死循环产生过多重复对象。

  二、JVM stacks和native method stacks溢出异常

    《Java虚拟机规范》 中描述了两种异常:

      1) 如果线程请求的栈深度大于虚拟机所允许的最大深度, 将抛出StackOverflowError异常。

      2) 如果虚拟机的栈内存允许动态扩展, 当扩展栈容量无法申请到足够的内存时, 将抛出 OutOfMemoryError异常。

    下面就进行实战测试:

      

      

    到达最大深度19237后,栈溢出。

  三、MetaSpace溢出异常(运行时常量池和方法区)

    

    

  四、直接内存溢出异常

    直接内存(Direct Memory) 的容量大小可通过-XX: MaxDirectMemorySize参数来指定, 如果不去指定, 则默认与Java堆最大值(由-Xmx指定) 一致。

    

    

最新文章

  1. leetcode--5. Longest Palindromic Substring
  2. ASP.NET MVC5中的Model验证
  3. Javascript最简单的把html字符串编码的方法
  4. project euler 开坑
  5. java.lang.OutOfMemoryError处理错误
  6. 如何让两个 并列的div高度相等
  7. 图结构练习——最短路径(dijkstra算法(迪杰斯拉特))
  8. 20.fastDFS集群java代码测试
  9. MySQL数据库 安装图解
  10. D5转Xe点滴
  11. Windows下打包Python的exe可执行文件
  12. SrcollView分页加载数据(第二种方法 自定义listView)
  13. Raphael:JS矢量图形库
  14. Js 通过点击改变css样式
  15. 菜鸟做HTML5小游戏 - 翻翻乐
  16. mbed列--基于飞思卡尔FRDM KL25Z鼠标设计的高速实现
  17. while补充,字符串和数字的内置方法
  18. 4.ElasticSearch的基本api操作
  19. 原生JS实现音乐播放器!
  20. 分布式监控系统Zabbix3.2给异常添加邮件报警

热门文章

  1. console.log(a)和console.log(window.a)的区别?
  2. println打印的原理
  3. JAVA之垃圾收集器
  4. ADD software version display
  5. Android官方文档翻译 十七 4.1Starting an Activity
  6. 【小记录】android下opencv的cv::dft()函数,CPU版本与opencl版本的性能相差16倍
  7. 事务与一致性:刚性or柔性
  8. 程序员必备的编程助手!SmartCoder助你轻松集成HMS Core
  9. python06day
  10. 计算机网络再次整理————socket[一]