繁体   English   中英

JVM 选项 -Xss - 它到底有什么作用?

[英]JVM option -Xss - What does it do exactly?

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

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

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

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

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

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

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

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

在这里加上我的两分钱,除了上面提到的,我们可以写一个简单的demo来展示设置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设置一起增长。

The output of java -Xss1m com.eugene.Main is 21638 and the output of java -Xss2m com.eugene.Main is 48325 at my local machine.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM