Java JVM选项-Xss-它具体做什么?

Java JVM选项-Xss-它具体做什么?,java,jvm,javaoptions,Java,Jvm,Javaoptions,它说-Xss用于“设置线程堆栈大小”,这到底是什么意思?有人能帮我理解吗?每个线程都有一个用于局部变量和内部值的堆栈。堆栈大小限制了调用的深度。一般来说,这不是您需要更改的内容。Java应用程序中的每个线程都有自己的线程。堆栈用于保存返回地址、函数/方法调用参数等。因此,如果线程倾向于通过递归算法处理大型结构,那么它可能需要一个用于所有这些返回地址等的大型堆栈。对于Sun JVM,您可以通过该参数设置该大小。如果我没有弄错的话,这会告诉JVM在发出StackOverflowerError之前将接

它说-Xss用于“设置线程堆栈大小”,这到底是什么意思?有人能帮我理解吗?

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

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

如果我没有弄错的话,这会告诉JVM在发出StackOverflowerError之前将接受多少连续调用。一般来说,这不是您希望更改的内容。

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

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

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

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

因此,-Xss选项用于限制堆栈消耗的内存量(通过存储返回地址、变量等),这也间接限制了堆栈的深度?我说得对吗?@instantsetsuna:我认为更常见的用法可能是增加默认限制。(总是有限制的。)但是,是的,你在控制堆栈的大小,它控制堆栈的深度。你如何在java编译器(又称javac)上实现这个XSS设置的等价物?对于那些使用基于scala的库的人来说,这是一个问题,这些库会导致在类的编译过程中发生大尾递归——Andrew Norman 9秒ago@AndrewNorman:您不需要将Java运行时选项编译到类文件中,这更像是特定于环境的事情。如果你真的需要在代码中完成,你可以编写一个很小的主类,它唯一的任务就是用你需要的选项启动你真正的应用程序。@AndrewNorman你可以使用
-Jflag
语法(例如
-J-Xss
)为编译器提供JVM配置标志。实际上不一定每次都是这样。SOE和OOME都可能由于不同的原因而发生,这些原因应该以不同的方式修复。是的,但我没有说-Xss是SOE和OOME的唯一原因,但反过来说-如果设置不正确,它可能会导致这两种情况之一。这里的一些示例(不是我的…):