概述
OOM异常分类:
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系统上可能运行很久都不会抛出,而是会导致系统假死。
最后
以上就是明亮期待为你收集整理的OOM异常分类:的全部内容,希望文章能够帮你解决OOM异常分类:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复