实战OutOfMemoryError异常
深入理解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指定) 一致。
最新文章
- leetcode--5. Longest Palindromic Substring
- ASP.NET MVC5中的Model验证
- Javascript最简单的把html字符串编码的方法
- project euler 开坑
- java.lang.OutOfMemoryError处理错误
- 如何让两个 并列的div高度相等
- 图结构练习——最短路径(dijkstra算法(迪杰斯拉特))
- 20.fastDFS集群java代码测试
- MySQL数据库 安装图解
- D5转Xe点滴
- Windows下打包Python的exe可执行文件
- SrcollView分页加载数据(第二种方法 自定义listView)
- Raphael:JS矢量图形库
- Js 通过点击改变css样式
- 菜鸟做HTML5小游戏 - 翻翻乐
- mbed列--基于飞思卡尔FRDM KL25Z鼠标设计的高速实现
- while补充,字符串和数字的内置方法
- 4.ElasticSearch的基本api操作
- 原生JS实现音乐播放器!
- 分布式监控系统Zabbix3.2给异常添加邮件报警
热门文章
- console.log(a)和console.log(window.a)的区别?
- println打印的原理
- JAVA之垃圾收集器
- ADD software version display
- Android官方文档翻译 十七 4.1Starting an Activity
- 【小记录】android下opencv的cv::dft()函数,CPU版本与opencl版本的性能相差16倍
- 事务与一致性:刚性or柔性
- 程序员必备的编程助手!SmartCoder助你轻松集成HMS Core
- python06day
- 计算机网络再次整理————socket[一]