一般棧溢出在無限遞歸下出現,下面的程序在創建對象時出現棧溢出:
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。