JVM内存溢出异常
JAVA栈以帧为单位保存线程的运行状态。每当线程调用一个方法时,虚拟机压入一个栈帧到JAVA栈中。只要这个方法没有返回,那么它就会一直存在。如果线程嵌套的方法(没有返回)太多,随着栈帧的逐渐增多,JAVA栈中所有栈帧大小总和大于-Xss设置的值,就会出现StackOverFlowError异常。
eg:
public class Cx{
public void method(){
System.out.print("cx");
method();
}
main(String[] args){
new Cx().method();
}
}
方法递归,当方法过多就会出现异常。
OutOfMemoryError:
当JAVA程序启动一个新线程时,没有足够的内存空间为该线程分配JAVA栈(一个JAVA栈的大小由-Xss参数确定),JVM则抛出OutOfMemoryError异常。
eg:
public class Cx{
main(String[] args){
new Thread(new runable(){
public void run(){
System.out.print("....cx");
}
}).start();
}
}
-------------------------------------JAVA堆溢出
我们知道JAVA堆是用来存储对象实例的。那么JAVA堆溢出,说明了存放对象实例的空间不足了。
内存分配不够存储对象实例,就会出现OutOfMemoryError异常。
-------------------------------------JAVA方法区溢出
方法区用来存放JAVA类型的相关信息,如类名、访问修饰符、方法描述、字段描述等。
在类装载器加载class文件到内存的过程中,虚拟机会提取其中的信息,并将其保存到方法区中。运行时产生大量的类,当达到设置的内存值之后,就会溢出。
希望大家会有收获,如果有不对的地方希望留言指出。谢谢