代码之家  ›  专栏  ›  技术社区  ›  S Singh

如何通过更改java代码来解决StackOverflowerError[已关闭]

  •  -1
  • S Singh  · 技术社区  · 7 年前

    实际上,在递归函数中,xml文件已被解析,如果在xml文件中存在以前的xml提要url,则该xml再次传递到同一个函数,并且在该xml文件中再次存在以前的xml提要url,然后再次传递到同一个函数。

    此过程将继续,直到获得上一个xml提要url。我没有得到10000个文件的错误,但在那之后,当第10001个文件再次发生相同的函数调用时,我得到了java.lang.StackOverflowerError。我想通过改变编码来解决这个错误,而不是通过增加内存,尝试实现解决方案,比如对固定批量进行递归调用。

    如果你能为StackOverflower提供更好的解决方案,请告诉我。如果您曾经实现过这种解决方案,请提供部分解决方案代码。

    当做

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ralf Kleberhoff    7 年前

    递归调用尤其危险。如果您不能提前知道最多会发生多少嵌套递归调用,那么获得StackOverflower错误的风险非常高。

    您的描述听起来有点像URL和链接形成的图中的深度优先搜索(通过递归实现)。如果您可以将其更改为广度优先搜索(通常通过迭代实现),那么就没有理由再出现堆栈溢出。当然,两种搜索都需要一个终止条件,这样你就不会永远陷入循环。

        2
  •  0
  •   S Singh    7 年前

    更新: 现在,我已经为StackOverflowerr实现了更好的解决方案。我正在运行一批可配置大小的进程。例如,该过程将以100个大小的批次进行处理,如果需要进一步处理,则将在下一批次中进行。