我期待outOfMemory但是在这里我得到了java中的stackOverFlow

Atu*_*tul 1 java memory stack-overflow

package com.atul;

public class StackOverFlow {

    public StackOverFlow() {
        callStackOverFlow();
    }

    public void callStackOverFlow() {
        StackOverFlow st = new  StackOverFlow();
    }

    public static void main(String[] args) {
        StackOverFlow st2 = new StackOverFlow();
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的程序中我试图得到OutOfMemory错误,但我得到StackOverFlow错误.据我所知,所有对象都是在堆中创建的.这里我们用构造函数进行递归,但仍然得到StackOverFlow错误.

为什么?

Pet*_*rey 7

在堆内存耗尽之前很久就会耗尽堆栈(对于简单情况,其最大深度大约为10,000).这是因为每个线程都有自己的堆栈,因此它必须比共享堆小很多.

如果您想耗尽内存,则需要更快地耗尽堆.

public class OutOfMemoryMain {
    byte[] bytes = new byte[100*1024*1024];
    OutOfMemoryMain main = new OutOfMemoryMain();

    public static void main(String... args) {
        new OutOfMemoryMain();
    }
}
Run Code Online (Sandbox Code Playgroud)