【发布时间】:2014-09-19 16:14:49
【问题描述】:
我目前正在学习 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);
}
}
我的问题如下:
- 什么可能导致我的堆栈大小在这个非常简单的示例的执行之间发生变化?
- 如今,堆栈溢出是否总是由于糟糕的代码设计(即无限递归、过大的原语等)而发生,还是存在堆栈仍然是技术限制的现实场景?
- 这似乎很明显,但是.. 增加系统的物理内存是否也会增加堆栈的大小?
【问题讨论】:
-
至于最后一个问题:不。首先,关于Java 方面,请记住Java 是独立于运行它的实际系统的“虚拟机”。这意味着它将处理自己的堆栈并将其与正常的操作系统/硬件堆栈分开。其次,底层操作系统对其进程的堆栈大小通常是固定的,因此添加更多内存不会增加堆栈。
标签: java memory stack-overflow