一般有这几种异常:
java.long.StackOverflowError
与栈(stack)相关,因为每个方法都会有一个栈帧,递归调用时容易出现这种异常。
public static void main(String[] args) {
int n=10;
add(n);
}
public static void add(int n){
add(n-1);
}
//Exception in thread "main" java.lang.StackOverflowError
在调用方法时要注意确保方法调用的结束,不能无限循环调用
- java.long.OutOfMemoryError
比较常见的java.lang.OutOfMemoryError:heap space
,java.lang.OutOfMemoryError: PermGen space
1, java.lang.OutOfMemoryError: PermGen space
是说 JVM 里的方法区的异常溢出,由于JVM在默认的情况下,Perm默认为64M,而很多程序需要大量的Perm区内存,导致OutOfMemoryError: PermGen space异常。
解决方法,增大JVM的 -XX:MaxPermSize 启动参数
2, java.lang.OutOfMemoryError:heap space 其它 OutOfMemoryError
而这个异常是因为 JVM堆内存或者说总体分少了。
解决方法,更改 -Xms -Xmx 启动参数
public class Errors {
public static void main(String[] args) {
Vector<BigObject> vector = new Vector<BigObject>();
while(true){
vector.add(new BigObject());
}
}
}
class BigObject{
int n=10;
public void test(){
n=20;
}
}
//Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
参考:http://stackoverflow.com/questions/11435613/whats-the-difference-between-stackoverflowerror-and-outofmemoryerror;
http://blog.youkuaiyun.com/chaofanwei/article/details/19483101;
http://blog.youkuaiyun.com/roland101/article/details/2197444