Memory management 分配给线程的堆栈内存来自哪里?

Memory management 分配给线程的堆栈内存来自哪里?,memory-management,garbage-collection,jvm,heap,Memory Management,Garbage Collection,Jvm,Heap,关于JavaGC和内存管理,我没有什么问题 在java中,我们通过xmx和xms参数定义进程内存的上限和下限。JVM使用这些参数来分配新旧空间。所以,如果创建了新线程,那么从哪个内存堆栈将内存分配给线程?是从烫发空间还是其他空间 类的静态变量也被分配到哪个空间:年轻空间、旧空间还是永久空间?(我猜是烫发?) XmX参数是否限制年轻+老代或年轻+老+烫发代或年轻+老+烫发+堆栈大小 感谢线程堆栈空间由另一个选项-Xss控制。是一个可能对您在这个特定主题上有所帮助的参考。基本上,堆栈内存来自堆栈区域

关于JavaGC和内存管理,我没有什么问题

在java中,我们通过xmx和xms参数定义进程内存的上限和下限。JVM使用这些参数来分配新旧空间。所以,如果创建了新线程,那么从哪个内存堆栈将内存分配给线程?是从烫发空间还是其他空间

类的静态变量也被分配到哪个空间:年轻空间、旧空间还是永久空间?(我猜是烫发?)

XmX参数是否限制年轻+老代或年轻+老+烫发代或年轻+老+烫发+堆栈大小


感谢

线程堆栈空间由另一个选项-Xss控制。是一个可能对您在这个特定主题上有所帮助的参考。

基本上,堆栈内存来自堆栈区域,它独立于堆区域和perm 区域

静态变量在堆中分配,字符串和数值常量除外

-Xmx
参数仅限制堆的年轻+旧部分,因为perm区域不是堆的一部分

堆栈区域大小由
-Xss
标志设置,堆区域大小由
-Xmx
标志设置,perm区域大小由
-XX:MaxPermSize
设置


如果您想深入了解JVM内部内存管理,我建议您这样做。

在solaris上,您可以使用'ulimit-a'查看进程的堆栈限制。我认为线程堆栈取自此资源。我想知道,当堆中有足够的空间用于线程,但没有足够的空间用于堆栈时,JVM是否会发出垃圾回收。

我知道关于-Xss标志。我的问题是:使用-Xss选项分配给线程的内存来自哪里?或者您可以回答这个问题:XmX参数是否限制了young+old gen或young+old+perm gen或young+old+perm+堆栈大小??如果不包括堆栈大小,那么从何处分配堆栈空间?