产生思考的源头是读书的时候碰到这个一段话:
“如果方法调用时,方法的参数和局部变量相对较多,那么栈帧中的局部变量表会变大,栈帧会膨胀以满足方法调用所需传递的信息。因此,单个方法调用所需的栈空间大小也会较多。”
开始测试 是否为整体栈帧都需要变大:
虚拟机设置: -Xss160k
public class ThreadDemo {
private static int count = 0;
public static void recur() {
count++;
recur();
}
public static void toRecur() {
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
int a7;
int a8;
int a9;
int a10;
count++;
recur();
}
public static void main(String[] args) {
try {
toRecur();
} catch(Throwable e) {
System.out.println("count is :" + count);
e.printStackTrace();
}
}
}
toRecur(): 方法中放置较多变量,则 该方法的栈帧相对于 recur()方法的栈帧时较大的。
-> 执行完 发现栈深 849
再看看recur栈帧也较大的情况:
如果栈深也在849左右,则前文的recur栈帧会膨胀。
public class ThreadDemo {
private static int count = 0;
public static void recur() {
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
int a7;
int a8;
int a9;
int a10;
count++;
recur();
}
public static void toRecur() {
int a1;
int a2;
int a3;
int a4;
int a5;
int a6;
int a7;
int a8;
int a9;
int a10;
count++;
recur();
}
public static void main(String[] args) {
try {
toRecur();
} catch(Throwable e) {
System.out.println("count is :" + count);
e.printStackTrace();
}
}
}
可以看到栈深425层,