【问题标题】:StackOverflowError to my recursive calls in JavaStackOverflowError 到我在 Java 中的递归调用
【发布时间】:2014-11-09 17:09:28
【问题描述】:

我在递归调用中收到StackOverflowError

    Exception in thread "main" java.lang.StackOverflowError
        at Test.trailMngr(Test.java:112)
        at Test.trailMngr(Test.java:115)
        at Test.trailMngr(Test.java:115)
        at Test.trailMngr(Test.java:115)
        at Test.trailMngr(Test.java:115)
        ...
    Java Result: 1

有没有办法在不更改代码的情况下解决这个问题?

我能想到的唯一方法是使其成为非递归方法。

代码中的所有其他内容在较小的输入大小下都可以正常工作——如果可能的话,我会避免更改(尽管我不抱希望)。

不太熟悉 Java 在这些事情上的表现。

TIA。

【问题讨论】:

  • 递归调用是否终止?您可以增加线程堆栈空间大小。 See hereother related questions/answers.
  • 用给定的输入很难回答你的问题
  • 我认为您的递归代码没有优雅地终止。但如果您确定终止逻辑,则应考虑通过 -Xss 选项增加堆栈大小。
  • @SamDJava 我正在运行指数算法。而且我不认为我在逻辑上犯了错误。

标签: java jvm stack-overflow


【解决方案1】:

假设您不处理无限递归,您可以使用命令行Xss 参数增加堆栈大小:

java -Xss8m Test

这是分配给每个线程内部使用的内存量。可以以字节 (-Xss8)、千字节 (-Xss8k)、兆字节 (-Xss8m) 或千兆字节 (-Xss8g) 为单位指定大小。请注意,将其设置为较高的值显然会增加您的内存使用量。

【讨论】:

  • @RobbyCornelissen - 让我试试这个
  • @SotiriosDelimanolis 不知道在池中或池外的线程是如何参与其中的。请澄清。
  • 正如您所提到的,如果您坚持使用 X 线程对象,则会增加内存使用量。
  • @RobbyCornelissen 我在哪里可以在 NetBeans 上完成这项工作?
  • this answer。就是设置堆大小,但原理是一样的。
猜你喜欢
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 2013-02-25
相关资源
最近更新 更多