JVM选项- xss -它到底做什么?

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

256996 次浏览

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

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

如果我没有弄错的话,这就是在发出StackOverflowError之前告诉JVM它将接受多少连续调用的方法。这不是你想要改变的。

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

在以下两种情况下,你都应该触摸它:

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

后者通常发生在你的Xss设置太大的时候——然后你需要平衡它(测试!)

在这里补充我的意见,除了上面提到的,我们可以写一个简单的演示来展示设置Xss的效果。

一般来说,它控制分配给每个线程的堆栈大小。

    public static void main(String[] args) {
try{
recur();
}catch (StackOverflowError e){
System.out.println(depth);
}
}


static int depth = 1;


public static void recur(){
depth++;
recur();
}

编译以上代码后,你会看到depth(调用层次)与传递的Xss设置一起增长。

在我的本地机器上,java -Xss1m com.eugene.Main的输出是21638java -Xss2m com.eugene.Main的输出是48325