-Xss JVM选项实际上是做什么的?

11

根据文档,-Xss用于设置JVM的堆栈大小。但是我对这个说法非常困惑。

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

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

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

非常感谢。

编辑:

谢谢你们的回答。看起来它是上述第(2)种情况。-Xss指定了特定线程的最大堆栈大小。

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

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


1
这个答案指出同义词是“-XX:ThreadStackSize”,这意味着它是针对每个线程的。 - Andy Turner
https://dev59.com/aW445IYBdhLWcg3wO31u - Christophe Roussy
2个回答

8
这是每个线程的堆栈大小,引用此Java命令页面
-Xss 设置线程堆栈大小(以字节为单位)...
因此,这是您问题中的第二部分。但是,我认为总结所有线程堆栈大小通常不准确。根据JVM实现,实际总堆栈大小可能不是2560K。请注意来自JVM规范的以下引用:
此规范允许Java虚拟机堆栈具有固定大小或根据计算要求动态扩展和收缩。如果Java虚拟机堆栈具有固定大小,则可以在创建该堆栈时独立选择每个Java虚拟机堆栈的大小。

4

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

这些内存将分配在哪里?

与C程序中的线程堆栈一样,是分配在本地内存中的。

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

由于堆栈不使用堆,所以不会使用这些保留的内存。

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

是的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接