java - 我期待 outOfMemory 但在这里我在 java 中得到 stackOverFlow

标签 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();
    }
}

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

为什么?

最佳答案

在您用完堆内存之前很久,您就用完了堆栈(对于简单情况,堆栈的最大深度约为 10,000)。这是因为每个线程都有自己的堆栈,所以它肯定比共享堆小很多。

如果你想用完内存,你需要更快地用完堆。

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

    public static void main(String... args) {
        new OutOfMemoryMain();
    }
}

关于java - 我期待 outOfMemory 但在这里我在 java 中得到 stackOverFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12686785/

相关文章:

java - 获取字符串中的bytedata数据

java - HTML 选择框在 Servlet 中返回 null

lisp - Euler #2 尝试后出现 Bignum 溢出错误

c# - Silverlight 嵌套自定义控件导致 StackOverflowException

java - 延迟设置颜色过滤器java

java - 为什么即使对于开箱即用的 Spring Boot 管理员,Java 进程的 RES 内存也会保持缓慢增长?

ios - 3 我不确定的泄漏?

android - 使用 Google Play 服务位置在 android 中唤醒过多的警报管理器

.net - 当 .NET 垃圾收集压缩堆时, "Allocate Bytes"性能计数器是否更新?

使用集合时的java无限循环