虚拟机栈和本地方法栈有下面两种异常:
线程请求的栈深度大于虚拟机允许最大栈深度,抛StackOverflowError
虚拟机栈扩展时无法申请到足够的空间,抛OutOfMemoryError
public class Test {
public int stackLength = 1;
public void stackLeak()
{
stackLength++;
stackLeak();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t = new Test();
try{
t.stackLeak();
} catch(Throwable e)
{
System.out.print("stack legth:\n"+t.stackLength);
throw e;
}
}
}
参数设定
-verbose:gc -Xss1M -XX:+HeapDumpOnOutOfMemoryError -XX:SurvivorRatio=8
运行结果
stack legth:29272
Exception in thread "main" java.lang.StackOverflowError
at Test.stackLeak(Test.java:10)
at Test.stackLeak(Test.java:10)
at Test.stackLeak(Test.java:10)