(三)OutOfMemoryError异常
来源:互联网 发布:电视免费视频软件 编辑:程序博客网 时间:2024/06/18 16:32
除了程序计数器外,虚拟机内存的其他几个运行时区域都会发生OutOfMemoryError,在虚拟机栈和本地方法栈中,会多出现一种异常:Stack Overflow,意思是请求深度超过了允许!
(1)Java堆溢出:Java堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免GC回收这些对象,那么当对象数量超过的时候,就是异常的时候!
Vm Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError 即:堆的最小内存是20兆,堆得最大内存是20兆,同时让虚拟机在出现溢出异常时候Dump出当前的内存堆转储快照以便事后分析。
要解决这个区域的异常:一般的手段是先通过内存映像分析工具(Eclipse Memory Analyzer)对Dump出来的堆转储快照进行分析,主要是分析:1,出现了内存泄漏 (GC未回收,或者对象代码创建方式不正确的,比如循环无用的对象)2,内存不足(对象都是需要使用的,内存不够) 其中的哪个原因!如果不是内存泄漏,那么就应该检查是否存在某些对象的生命周期过长,持有状态时间过长,尝试减少程序运行的内存消耗,如果不行,那就升级硬件,加大堆得内存!
(2)虚拟机栈和本地方法栈溢出: 在HotSpot中,不区分二者! -Xoss(设置本地方法栈大小)存在,但实际上是无效 的,栈容量只由 -Xss参数设置!
1,如果线程请求的栈深度大于虚拟机所允许的最大深度,那么将抛出 StackOverflowError
2,如果虚拟机在扩展栈内存的时候,无法申请到足够的内存空间,则抛出OutOfMemoryError(先检查虚拟机的栈内存是否设置)
(3)方法区和运行时常量池溢出
String.intern()是一个Native方法,作用是:如果字符串常量池中已经保存一个等于此String对象的字符串,则返回代表池中这个字符串的String对象;否则,将此String对象包含的字符串添加到常量池中,并且返回此String对象的引用!
(4)本机直接内存溢出
通过-XX:MaxDirectMemorySize指定,如果不指定,那么默认与Java堆得最大值一样!可以尝试查找一下NIO的原因
- (三)OutOfMemoryError异常
- 深入理解JVM(三):OutOfMemoryError异常
- OutOfMemoryError异常 (笔记)
- OutOfMemoryError异常
- OutOfMemoryError异常
- OutOfMemoryError异常
- OutOfMemoryError异常
- 深入理解java虚拟机 第2章(三):OutOfMemoryError异常
- jvm(2)-OutOfMemoryError 异常(内存溢出异常)
- 虚拟机堆OutOfMemoryError异常
- tomcat异常OutOfMemoryError
- JVM OutOfMemoryError异常
- JVM > OutOfMemoryError异常
- 实战:OutOfMemoryError 异常
- OutOfMemoryError异常实战
- OutOfMemoryError异常实例
- OutOfMemoryError异常总结
- OutOfMemoryError异常总结
- vue 简单分页组件
- .Net网站架构设计(八)测试
- Qt中的三种基类
- 微信、公网播放摄像机视频方案
- andridstudio升级3.0版本问题
- (三)OutOfMemoryError异常
- [bzoj1196][最小生成树]公路修建问题
- Golang与DLL交互
- 人生过往
- hadoop2.8.2配置
- ubuntu版本很老,apt-get update更新失败时(W: Failed to fetch ...)------如何创建新的sources.list
- 电脑显示已连接网络但是无internet访问
- 升级WordPress出现"另一更新正在进行"问题解决方案
- spark学习之数据预处理和特征提取