OOM异常分类:
2016-03-31 14:55
155 查看
OOM异常分类:
Java堆溢出
虚拟机栈和本地方法栈溢出
方法区和运行常量池溢出
本机直接内存溢出
1,Java堆溢出 heap space:
Java堆溢出是因为Java堆容量不足导致的,可以通过设置虚拟机参数-Xms和-Xmx分别设定Java堆的最小容量和最大容量。
2,永久代容量不足 PermGen space:
永久代是记录常量,静态变量,类信息等,常见使用String.intern()方法导致常量过多;还有一种情况是使用CGlib动态创建类的代理过多,也会导致类信息膨胀;还有一种是Java Web中,Jsp文件过多导致,因为JSP其实也是一个Java类,可通过设置虚拟机参数-XX:PermSize和-XX:MaxPermSize分别设定永久代的最小容量和最大容量。
3,本级直接内存溢出DirectMemory:
通常是操作系统内存不足的情况下,Java应用程序还向操作系统申请本地内存导致,可通过设置-XX:MaxDirectMemorySize设定Java虚拟机可申请本地内存的最大容量。
4,创建线程过多(unable to create new native thread):由于每个线程都会分配一定的栈空间,申请线程过多,会导致栈空间不足,从而导致栈溢出,但Java虚拟机抛出异常信息的是 “java.lang.OutOfMemoryError:unable to create new native thread”这个异常在Windows系统上可能运行很久都不会抛出,而是会导致系统假死。
Java堆溢出
虚拟机栈和本地方法栈溢出
方法区和运行常量池溢出
本机直接内存溢出
1,Java堆溢出 heap space:
Java堆溢出是因为Java堆容量不足导致的,可以通过设置虚拟机参数-Xms和-Xmx分别设定Java堆的最小容量和最大容量。
public class RuntimeConstantPoolOOM { public static void main(String[] args) { List<String> list = new ArrayList<String>(); int i=0; while(true){ list.add(String.valueOf(i++).intern()); //会产生java.lang.OutOfMemoryError:PermGen space } } }
2,永久代容量不足 PermGen space:
永久代是记录常量,静态变量,类信息等,常见使用String.intern()方法导致常量过多;还有一种情况是使用CGlib动态创建类的代理过多,也会导致类信息膨胀;还有一种是Java Web中,Jsp文件过多导致,因为JSP其实也是一个Java类,可通过设置虚拟机参数-XX:PermSize和-XX:MaxPermSize分别设定永久代的最小容量和最大容量。
3,本级直接内存溢出DirectMemory:
通常是操作系统内存不足的情况下,Java应用程序还向操作系统申请本地内存导致,可通过设置-XX:MaxDirectMemorySize设定Java虚拟机可申请本地内存的最大容量。
4,创建线程过多(unable to create new native thread):由于每个线程都会分配一定的栈空间,申请线程过多,会导致栈空间不足,从而导致栈溢出,但Java虚拟机抛出异常信息的是 “java.lang.OutOfMemoryError:unable to create new native thread”这个异常在Windows系统上可能运行很久都不会抛出,而是会导致系统假死。
相关文章推荐
- ubuntu安装apache2
- Codeforces 145D Lucky Pair (组合计数)
- ext:TextField 修改FieldLable中字体颜色
- fatal error C1859: “x64\Release\58Tn.pch”意外的预编译头错误,只需重新运行编译器就可能修复此问题
- mysql的一些操作(linux+windows)持续更新
- 接口测试中的方法
- python解析json串与正则匹配对比
- HTML5介绍
- 什么是hard code
- 如何在微信浏览器的H5商城获取用户openid
- Linux wc 命令,查看行数,字节数
- Firefox下载安装fireBug提示下载出错的解决方案
- Winpcap网络开发库入门
- Struts实例
- autocomplete在Firefox下用中文检索
- Linux安装eclipse并在桌面图标
- Oracle 树操作(select…start with…connect by…prior)
- xib方式 在tableviewcell上添加button (代理方式)
- Ubuntu 12.04安装GCC-3.4.6
- mysql blob