1.Java堆溢出
2.虚拟机栈和本地方法栈溢出
单线程环境下栈帧太大 或者虚拟机栈容量太小都会抛出stackoverflow异常
public class JavaVMStackSOF {
private int stackLength = 1;
public void stackLeak(){
stackLength++;
stackLeak();
}
public static void main(String[] args) {
JavaVMStackSOF oom = new JavaVMStackSOF();
try{
oom.stackLeak();
}catch (Throwable e){
System.out.println("Stack length:" + oom.stackLength);
throw e;
}
}
}
-Xss 每个堆栈的大小
JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右
一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。一般设置这个值就可以了
调大每个堆栈的大小,可以让这个线程的栈递归的深度更深;在相同物理内存下,减小这个值能生成更多的线程.