【问题标题】:What does -Xss JVM option actually do-Xss JVM 选项实际上有什么作用
【发布时间】:2016-11-09 14:30:41
【问题描述】:

从文档中,-Xss 用于设置 JVM 的堆栈大小。但我对这种说法感到很困惑。

在 Java 中,每个线程都有自己的堆栈。是否-Xss指定的数字:

  1. 所有线程可以用作堆栈的总内存?例如如果 -Xss 设置为 256K,则所有线程都将在这 256K 内存中创建自己的堆栈。

  2. 线程的每个堆栈的大小。例如如果 -Xss 设置为 256K,每个线程将有一个 256K 大的堆栈。因此 10 个线程将总共使用 2560K。

非常感谢。

编辑:

感谢您的回答。看起来它是上面的(2)senario。 -Xss 指定特定线程的最大堆栈大小。

然后我有一个后续问题:这些内存将分配在哪里?

我们可以使用 -Xmx 和 -Xms 指定保留的堆内存。是否会使用这些保留的内存分配堆栈?还是直接从本机内存分配?

【问题讨论】:

标签: java jvm


【解决方案1】:

这是每个线程的堆栈大小,引用this page on the java command

-Xss尺寸

设置线程堆栈大小(以字节为单位)...

所以这是您问题的第二部分。但是,我认为总结所有线程堆栈大小通常并不准确。根据 JVM 实现,实际总堆栈大小可能不是 2560K。请注意 JVM 规范中的这句话:

本规范允许 Java 虚拟机堆栈具有固定大小或根据计算需要动态扩展和收缩。如果 Java 虚拟机堆栈具有固定大小,则每个 Java 虚拟机堆栈的大小可以在创建堆栈时独立选择。

【讨论】:

    【解决方案2】:

    每个线程都有自己的堆栈。大多数 JVM 使用本机线程,而这些堆栈使用本机虚拟内存。使用虚拟内存的好处是只有被触摸的页面才会变成使用的内存。

    这些内存将分配在哪里?

    类似于 C 程序中的线程堆栈的原生内存。

    我们可以使用 -Xmx 和 -Xms 指定保留的堆内存。是否会使用这些保留的内存分配堆栈?

    堆栈不使用堆,所以,不。

    还是直接从本机内存分配?

    是的。

    【讨论】:

      猜你喜欢
      • 2011-06-25
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2023-01-14
      相关资源
      最近更新 更多