首页java › java内存溢出示例

java内存溢出示例

public class A {
private int i;
private   A a = new A();
public A() {
System.out.println(111);
}
public static void main(String[] args) {
A a = new A();
}
}

如上述代码,执行的时候会产生堆栈溢出.Exception in thread “main” java.lang.StackOverflowError,但是如果把A中的变量a换成static的变量则不会出现这个问题,

public class A {
private int i;
private  static A a = new A();
public A() {
System.out.println(111);
}
public static void main(String[] args) {
A a = new A();
}
}

java类库中 java.lang.Boolean中就是这样做的!请问new A()时内存分配情况,还有a = new A(),他里面的成员变量是不是一直new下去啊? 对象的内存分配是在堆中完成的,而引用对象A的就是a是在栈中分配的内存,当你new A()时,会一直在栈中分配就是a,但每个变量a所指向的对象不相同,最终栈内存不够,报堆栈溢出…

发表评论

注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>