一般栈溢出在无限递归下出现,下面的程序在创建对象时出现栈溢出:
public class Main { public static void main(String[] args) { A a = new A(); } } class A { private A a = new A(); }
不应该是outofmemory吗?栈里只有a这个reference,其引用的对象,以及对象里的a引用的对象都在堆里分配内存?
猜想(毫不负责):
应该是执行new A()时,调用构造函数,而构造函数初始化a需要调用构造函数,函数调用函数就会将函数地址压栈,因为是无限创建对象,无限的调用构造函数,那就无限的压栈,导致Exception in thread "main" java.lang.StackOverflowError。