java的虚拟机栈中可能会存在java.lang.StackOverflowError这个错误,本例中通过方法的递归来模拟出该异常,进而研究其细节。
测试例子:
1package test.heap;
2
3public class TestStack {
4 private int len;
5 public static void main(String[] args) {
6 TestStack stack = new TestStack();
7 try {
8 stack.test();
9 } catch (Throwable e) {
10 e.printStackTrace();
11 System.out.println("len=" + stack.getLen());
12 }
13 }
14 void test() {
15 this.len++;
16 test();
17 }
18 int getLen() {
19 return this.len;
20 }
21}
执行结果如下:
1java.lang.StackOverflowError
2 at test.heap.TestStack.test(TestStack.java:16)
3 at test.heap.TestStack.test(TestStack.java:16)
4 at test.heap.TestStack.test(TestStack.java:16)
5 at test.heap.TestStack.test(TestStack.java:16)
6 at test.heap.TestStack.test(TestStack.java:16)
7 at test.heap.TestStack.test(TestStack.java:16)
8 at test.heap.TestStack.test(TestStack.java:16)
9 at test.heap.TestStack.test(TestStack.java:16)
10 at test.heap.TestStack.test(TestStack.java:16)
11len=11116
12
13Process finished with exit code 0
栈的默认大小一般1M或者几百k,通过-Xss参数可以指定。如:-Xss100k