相关疑难解决方法(0)

JVM选项-Xss - 它到底做了什么?

在这里说-Xss用于"设置线程堆栈大小",这究竟是什么意思?谁能帮我理解这个?

java jvm javaoptions

222
推荐指数
4
解决办法
18万
查看次数

如何增加Java堆栈大小?

我问这个问题是为了了解如何在JVM中增加运行时调用堆栈的大小.我已经得到了答案,我还得到了许多有用的答案和评论,这些答案和评论与Java如何处理需要大型运行时堆栈的情况有关.我已经用答案摘要扩展了我的问题.

最初我想增加JVM堆栈大小,所以程序就像没有运行的程序一样StackOverflowError.

public class TT {
  public static long fact(int n) {
    return n < 2 ? 1 : n * fact(n - 1);
  }
  public static void main(String[] args) {
    System.out.println(fact(1 << 15));
  }
}
Run Code Online (Sandbox Code Playgroud)

相应的配置设置是java -Xss...具有足够大值的命令行标志.对于TT上面的程序,它与OpenJDK的JVM一样:

$ javac TT.java
$ java -Xss4m TT
Run Code Online (Sandbox Code Playgroud)

其中一个答案还指出,这些-X...标志是依赖于实现的.我在用

java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.1) (6b18-1.8.1-0ubuntu1~8.04.3)
OpenJDK 64-Bit Server VM (build 16.0-b13, mixed mode)
Run Code Online (Sandbox Code Playgroud)

也可以仅为一个线程指定一个大堆栈(参见其中一个答案如何).建议使用此方法java -Xss...以避免为不需要它的线程浪费内存.

我很好奇上面的程序需要多大的堆栈,所以我运行它n增加了:

  • -Xss4m就足够了 fact(1 …

java stack-overflow stack

114
推荐指数
4
解决办法
17万
查看次数

Java堆栈溢出错误 - 如何在Eclipse中增加堆栈大小?

我正在运行一个我在Eclipse中用Java编写的程序.对于非常大的输入,该程序具有非常深的递归级别.对于较小的输入,程序运行正常但是当给出大输入时,我得到以下错误:

Exception in thread "main" java.lang.StackOverflowError
Run Code Online (Sandbox Code Playgroud)

可以通过增加Java堆栈大小来解决这个问题,如果是这样,我该如何在Eclipse中执行此操作?

更新:

@Jon Skeet

代码以递归方式遍历解析树以构建数据结构.因此,例如,代码将使用解析树中的节点执行一些工作,并在节点的两个子节点上调用自身,将它们的结果组合在一起以给出树的整体结果.

递归的总深度取决于解析树的大小,但当递归调用的数量达到1000时,代码似乎失败(没有更大的堆栈).

此外,我很确定代码没有失败,因为它适用于小输入的bug.

java eclipse stack-overflow jvm jvm-arguments

59
推荐指数
4
解决办法
14万
查看次数

标签 统计

java ×3

jvm ×2

stack-overflow ×2

eclipse ×1

javaoptions ×1

jvm-arguments ×1

stack ×1