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

ins*_*una 222 java jvm javaoptions

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

T.J*_*der 260

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

  • 因此,-Xss选项用于限制堆栈消耗的内存量(通过存储返回地址,变量等),以及**间接**限制堆栈可以获得的深度?我对么? (11认同)
  • @instantsetsuna:我认为更常见的用途可能是*增加*默认限制.(总是有一个限制.)但是,是的,您正在控制堆栈的大小,它控制堆栈的深度. (4认同)
  • @AndrewNorman您可以使用“-Jflag”语法(例如“-J-Xss”)为编译器提供运行时应使用的JVM配置标志。 (2认同)

Ada*_*zek 160

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

您应该在以下两种情况中触摸它:

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

后者通常是在你的Xss设置得太大时 - 然后你需要平衡它(测试!)

  • 不一定每次都是.SOE和OOME都可能因为不同的原因而发生,应该以不同的方式修复. (3认同)
  • 没错,但我没有说-Xss是SOE和OOME的唯一原因,但反之亦然 - 如果设置不正确,它可能会导致其中一个. (2认同)

Pet*_*rey 5

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


Kel*_*dil 5

如果我没记错的话,这就是告诉 JVM 在发出 StackOverflowError 之前它将接受多少个连续调用。一般来说,您不想改变什么。