返回信息流public class Main {
public static void main(String[] args) {
(new Loop()).method1();
}
}
class Loop {
static long cont = 0;
public Loop() {
}
public void method1() {
System.out.println("method1 invoke" + cont++);
method2();
}
public void method2() {
System.out.println("method2 invoke" + cont++);
method1();
}
}
结果:内存溢出了。。。
这是一条镜像帖。来源:北邮人论坛 / java / #13135同步于 2010/1/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
大家做过这个实验吗?
linxxon
2010/1/29镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
试试看
【 在 linxxon (linx_bupt) 的大作中提到: 】
: public class Main {
: public static void main(String[] args) {
: (new Loop()).method1();
: ...................
不是内存溢出,是堆栈溢出。
就是说嵌套一定数目的方法就会产生异常。比如写一万个方法,第一个方法调用第二方法,第二个方法调用第三个方法以此类推,不等调用完也会产生此异常。
平时接触的程序很少有嵌套这么多层方法不返回的。
可以设置参数-Xss来推迟或避免这种异常。比如还是写一万个方法,如果-Xss设置足够大,调用完一万个方法后仍没超过,则就不会产生此异常。不过lz的程序是无限嵌套,这个异常一定会发生。
这个参数是啥意思?
【 在 greedisgood (greedisgood) 的大作中提到: 】
: 不是内存溢出,是堆栈溢出。
: 就是说嵌套一定数目的方法就会产生异常。比如写一万个方法,第一个方法调用第二方法,第二个方法调用第三个方法以此类推,不等调用完也会产生此异常。
: 平时接触的程序很少有嵌套这么多层方法不返回的。
: 可以设置参数-Xss来推迟或避免这种异常。比如还是写一万个方法,如果-Xss设置足够大,调用完一万个方法后仍没超过,则就不会产生此异常。不过lz的程序是无限嵌套,这个异常一定会发生。
对,这种错误当程序简单的时候很容易避免,但是如果当一个系统设计的不好,逻辑过于复杂的时候,搞不好就出现这样的错误了
【 在 greedisgood 的大作中提到: 】
: 不是内存溢出,是堆栈溢出。
: 就是说嵌套一定数目的方法就会产生异常。比如写一万个方法,第一个方法调用第二方法,第二个方法调用第三个方法以此类推,不等调用完也会产生此异常。
: 平时接触的程序很少有嵌套这么多层方法不返回的。
: ...................