gpt4 book ai didi

java - 解决 java.lang.StackOverflowError 内存问题

转载 作者:行者123 更新时间:2023-11-29 08:12:44 26 4
gpt4 key购买 nike

我正在使用递归函数,但在执行时出现此错误:

Exception in thread "main" java.lang.StackOverflowError
at java.util.HashMap$Entry.<init>(Unknown Source)
at java.util.HashMap.addEntry(Unknown Source)
at java.util.HashMap.put(Unknown Source)

我对方法进行了调试,100% 确定它会在某个时刻结束。

所以我认为它与内存问题有关。

有什么解决办法吗?

EDIT:

public static Vector<String> _toOpen;

public static void openFiles(Vector<String> files)
{
...

while(actualFile.hasNext)
{
if(!_toOpen.contains(word))
{
_toOpen.add(word);
System.out.println("word");
}
}

...

if(_toOpen.size() > 0)
{
openFiles(_toOpen);
}
}

在第一次调用 OpenFiles 时,我向 OpenFiles 传递了一个包含要打开的文件列表的 Vector,每个文件都有一个要再次打开的文件列表,依此类推...

我正在做的是阻止打开一个文件,如果它之前是 dopne。

最佳答案

查看您的代码 - 在您最终调用 openFiles(_toOpen) 时是否有任何条件(例如 if)?

如果不是,那么每次调用openFiles时,它都会递归调用自身。无论堆栈的最大大小是多少,此方法都不会实际返回,您实际上已经陷入了无限循环。

如果事先有一些条件,您显然会遇到这样一种情况,它一直评估为 true(或导致进行递归调用的任何原因)。


除此之外,您似乎可以重构代码来避免这种情况。您要使用 _toOpen 做什么?为什么你似乎忽略了传入的 files 参数(我很欣赏有省略的代码,并且大概内容被复制到 _toOpen,但这至少可以说是不寻常的).

递归调用似乎不是解决此问题的最佳方法,除非您遇到一些奇怪的情况,例如文件引用其他要打开的文件。

关于java - 解决 java.lang.StackOverflowError 内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7106522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com