266

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

4

4 回答 4

297

Java 应用程序中的每个线程都有自己的堆栈。堆栈用于保存返回地址、函数/方法调用参数等。因此,如果线程倾向于通过递归算法处理大型结构,则可能需要一个大堆栈来存储所有这些返回地址等。使用 Sun JVM,您可以通过该参数设置该大小。

于 2011-02-11T10:25:35.570 回答
188

它确实在 JVM 上设置了堆栈大小。

您应该在以下两种情况中的任何一种情况下触摸它:

  • StackOverflowError(堆栈大小大于限制),增加值
  • OutOfMemoryError: 无法创建新的本地线程(线程太多,每个线程都有很大的堆栈),减少它。

后者通常在您的 Xss 设置过大时出现 - 然后您需要平衡它(测试!)

于 2012-09-28T16:35:49.633 回答
7

每个线程都有一个用于局部变量和内部值的堆栈。堆栈大小限制了调用的深度。通常,这不是您需要更改的内容。

于 2011-02-11T10:24:55.237 回答
4

如果我没记错的话,这就是告诉 JVM 在发出 StackOverflowError 之前它将接受多少连续调用的原因。一般不是您希望更改的内容。

于 2011-02-11T10:27:06.083 回答