我有幾個關於java GC和內存管理的問題。分配給線程的堆棧內存來自哪裏?
在java中,我們通過xmx和xms參數定義進程內存上限和下限。使用這些參數,JVM分配年輕的舊的和燙髮的空間。因此,如果創建新線程,那麼從哪個內存堆棧中將內存分配給線程?是來自燙髮區還是其他空間?
還有類的靜態變量分配給哪些空間年輕人,老人或燙髮空間? (我猜燙髮了嗎?)
XmX參數限制青少年+老年人OR年輕+老+燙髮族OR年輕+老+燙髮+堆疊尺寸?
由於
我有幾個關於java GC和內存管理的問題。分配給線程的堆棧內存來自哪裏?
在java中,我們通過xmx和xms參數定義進程內存上限和下限。使用這些參數,JVM分配年輕的舊的和燙髮的空間。因此,如果創建新線程,那麼從哪個內存堆棧中將內存分配給線程?是來自燙髮區還是其他空間?
還有類的靜態變量分配給哪些空間年輕人,老人或燙髮空間? (我猜燙髮了嗎?)
XmX參數限制青少年+老年人OR年輕+老+燙髮族OR年輕+老+燙髮+堆疊尺寸?
由於
基本上,堆棧內存來自堆棧區域,它與堆區和perm 區域無關。
靜態變量分配在堆中,除了字符串和數字常量。
-Xmx
參數只限於堆的年輕+舊部分,因爲燙髮區不是它的一部分。
堆棧區域大小由-Xss
標誌設置,堆區域大小由-Xmx
標誌設置,並且燙髮區域大小由-XX:MaxPermSize
設置。
如果你想深入JVM內存管理,我推薦這個blog entry。
線程堆棧空間被另一選項-Xss控制。 Here是一個可以幫助你瞭解這個特定主題的參考。
在solaris上,您可以使用'ulimit -a'來查看進程的堆棧限制。我認爲線程堆棧取自這個資源。我想知道當堆中有足夠的空間用於線程時,JVM是否會發出垃圾回收,但是堆棧空間不足。
我知道-Xss標誌。我的問題是:使用-Xss選項分配給線程的內存從哪裏來?或者你可以回答這個問題:XmX參數限制青年+老年人或青年+老年+燙髮族或年輕+老+燙髮+堆疊大小?如果它不包括堆棧大小,那麼從哪裏分配堆棧空間? – Ashish 2010-09-26 02:43:28