二、OutOfMemoryError内存溢出
来源:互联网 发布:app免费下载软件 编辑:程序博客网 时间:2024/06/06 14:44
1.Java堆溢出
Java堆溢出是实际应用中最常见的内存溢出异常情况。出现Java堆溢出时,异常堆栈信息“java.lang.OutOfMemoryError”后面会紧跟着进一步提示“java heap space”。
要解决这个区域的异常,一般的手段是首先通过内存映像分析工具对dump出来的堆转储快照进行分析,重点是确认是内存泄漏还是内存溢出。若是内存泄漏,可以进一步通过工具查看泄露对象到GC Roots的引用链,从而找到泄露的代码。若不存在内存泄漏,则应当检查虚拟机堆的参数看能否调大,再看代码中是否存在某些对象的生命周期过长的情况
2.虚拟机栈和本地方法栈溢出
如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。
如果虚拟机在扩展栈时无法申请到足够的内存空间,则会抛出OutOfMemoryError异常。
在单线程中,无论是由于栈帧太大,还是虚拟机栈容量太小,当内存无法分配时,虚拟机抛出的都是StackOverflowError异常,可以通过阅读错误堆栈信息找到代码位置。
如果是建立多线程导致的内存溢出,在不能减少线程数或更换更高配置的机器的情况下,就只能通过减少最大堆和减少栈容量来换取更过的线程。
3.运行时常量池溢出
可以通过-XX:PermSize和–XX:MaxPermSize限制方法区的大小,从而间接限制其中常量池的容量。遇到该溢出,会在OutOfMemoryError后面跟随提示信息“PermGen space”。
4.方法区溢出
方法区用于存放class的相关信息,如类名、访问修饰符、常量池等。一般都是因为产生大量的类造成方法区空间满而溢出。
5.本机直接内存溢出
DirectMemory容量可通过-XX:MaxDirectMemorySize指定,若不指定,则默认与Java堆的最大值一样。
由DirectMemory导致的内存溢出,一个明显的特征是在Heap Dump文件中不会看见明显的异常。如果发现OOM之后Dump文件很小,而程序中又直接或间接使用了NIO,那么可以考虑是不是这方面的原因。
- 二、OutOfMemoryError内存溢出
- android内存溢出OutOfMemoryError
- OutOfMemoryError(内存溢出)
- OutOfMemoryError(内存溢出)
- OutOfMemoryError(内存溢出)
- 内存溢出(OutOfMemoryError)
- java关于OutOfMemoryError(内存溢出)
- 内存溢出分析:OutOfMemoryError异常
- java.lang.OutOfMemoryError: PermGen space 内存溢出
- Eclipse下内存溢出错误(OutOfMemoryError)
- 内存溢出问题(java.lang.OutOfMemoryError)
- 内存溢出 ava.lang.OutOfMemoryError 解析
- OutOfMemoryError: Java heap space(内存溢出)
- JAVA内存溢出(OutOfMemoryError)的解决办法
- tomcat报内存溢出 java.lang.OutOfMemoryError
- tomcat的OutOfMemoryError内存溢出解决方法
- Tomcat内存溢出 tomcat outofmemoryerror permgen space
- JVM—内存溢出、OutOfMemoryError、StackOverflowError
- MFC 播放动画。
- Android的零散知识
- 移动公司面试反思
- Java线上应用故障排查之一:高CPU占用
- Java开发中的23种设计模式详解(转)
- 二、OutOfMemoryError内存溢出
- Unity3D研究院之Jenkins的使用(七十八)
- js 闭包与原型
- K-近邻算法
- Hibernate第一个程序
- jquery设置easyui校验
- Unity3D研究院之IOS全自动打包生成ipa(六十八)
- hive 2.1.0 安装及MySQL元数据管理配置
- Unity3D研究院之Android全自动打包生成apk(六十九)