从文档中,-Xss用于设置JVM的堆栈大小。但我对此声明感到非常困惑。
在Java中,每个线程都有自己的堆栈。是否由-Xss指定了数字:
所有线程可以用作堆栈的总内存?例如如果-Xss设置为256K,则所有线程将在此256K内存中创建自己的堆栈。
每个线程堆栈的大小。例如如果-Xss设置为256K,则每个线程将具有256K的堆栈。因此,10个线程将共使用2560K。
非常感谢。
编辑:
感谢您的回答。它看起来像是上面的(2)senario。 -Xss指定特定线程的最大堆栈大小。
然后我有一个跟进问题:这些内存将在何处分配?
我们可以使用-Xmx和-Xms指定保留堆内存。是否使用这些保留的内存分配堆栈?或者它是直接从本机内存分配的?
答案 0 :(得分:8)
它是每个线程的堆栈大小,引用this page on the java command:
<强> -Xss 强> 大小
设置线程堆栈大小(以字节为单位)......
所以这是你问题的第二部分。但是,我并不认为总结所有线程堆栈大小通常是准确的。根据JVM实现,实际的总堆栈大小可能不是2560K。请注意JVM规范的引用:
此规范允许Java虚拟机堆栈具有固定大小或根据计算的需要动态扩展和收缩。如果Java虚拟机堆栈具有固定大小,则可以在创建堆栈时单独选择每个Java虚拟机堆栈的大小。
答案 1 :(得分:3)
每个线程都有自己的堆栈。大多数JVM使用本机线程,这些堆栈使用本机虚拟内存。使用虚拟内存的优点只是触摸的页面变成了使用的内存。
这些内存将分配到哪里?
本机内存就像C程序中的线程堆栈一样。
我们可以使用-Xmx和-Xms指定保留堆内存。是否使用这些保留的内存分配堆栈?
堆栈不使用堆,没有。
或者它是直接从本机内存分配的?
是