为什么不总是发生堆栈溢出?

用户名

我目前正在学习Java,作为学习的一部分,我试图有意引起堆栈溢出,以了解它会做什么。

我进行了一些边界测试,有趣的是,我发现如果执行以下代码,只会偶发地导致错误。有时它会毫无问题地运行。

public class SO
{
    public static void main(String[] args)
    {
        ohno(0);
    }

    public static void ohno(int a)
    {
        System.out.println(a);
        if (a != 11413)
            ohno(a+1);
    }
}

我的问题如下:

  • 在这个非常简单的示例的两次执行之间,是什么导致我的堆栈大小变化?
  • 如今,堆栈溢出是否总是由于不良的代码设计(例如,无限递归,过多的原语等)而发生,还是在现实世界中仍然存在堆栈技术限制的情况?
  • 这似乎很明显,但是..增加系统的物理内存是否还会增加堆栈的大小?
戴夫·牛顿

有限的堆栈大小是分配给JVM的内存量的函数。

资源受限的系统中有较少的内存可以被分配,所以绝对有现实世界的场景中栈的大小是一个限制,而有些情况下,你必须使用迭代解决方案,以自然递归问题,结果倍。

仅当您允许JVM分配内存时,才增加系统的物理内存,否则,将获得该平台的默认值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章