在Java中,当方法调用自身并导致无限循环时,将引发stackoverflow错误。当对象在堆内存中初始化时,由于涉及对象调用方法,因此不应抛出堆内存溢出错误。
有堆溢出错误之类的东西吗?

最佳答案

您走在正确的轨道上。您可能会用完堆内存,但它不称为HeapOverflow。它称为OutOfMemoryError。尽管HeapOverflow听起来很吸引人,但因为堆中经常散布着自由的分配区域,所以没有这么说。另一方面,堆栈只有两个区域,空闲区域和已分配区域。当您在堆栈上进行更多分配时,分配的区域将增长为可用区域。因此,您最终会使堆栈溢出。关于堆栈与堆here的更多信息。

这是堆内存用完的示例:

public class RunOutOfMemory {
    public static void main(String[] args){
        System.out.println("Haven't tried to allocate lots of heap memory.");
        int[][] matrix = new int[100000][100000000];
        System.out.println("A miracle occured.");
    }
}


剧透警报:您需要大约4 TB的内存才能产生奇迹

08-05 20:18