我有一个程序,通过递归传递大量数据,比如 1000 个变量。递归至少会运行 50 或 60 次。我担心的是,由于空间不足,数据是否有可能被覆盖在内存位置上,或者如果没有内存,我会得到一些异常,即程序内存已经用完了(我没有收到这样的错误)?
是否有可能因为程序没有更多内存并且覆盖现有位置而得到错误的解决方案?
涉及两个存储区域:stack和堆。堆栈是当前的位置state保留方法调用的内容(即局部变量和引用),堆是存储对象的地方。热点文档说在Linux 64位上每个线程默认有一个1024kB的堆栈。堆可以任意大,目前已达到 GB 量级。
递归方法同时使用堆栈和堆。您首先用完哪一个取决于实施情况。作为一个例子,考虑一个需要数千个整数的方法:如果它们被声明为局部变量,即:
public void stackOverflow() {
int a_1;
int a_2;
int a_3;
// ...
int a_10_000_000;
}
你的程序将会崩溃StackOverflowError
。另一方面,如果您将整数组织在数组中,例如:
public void outOfMemory() {
int[] integers = new int[10 * 1000 * 1000];
}
堆很快就会被填满,程序将以OutOfMemoryError
。在这两种情况下,内存都不会损坏或数据被覆盖。然而,在这两种情况下,代码都是wrong并且必须以某种方式修复 - 但告诉你how我们需要更多地了解您的计划。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)