2016-07-07 67 views
5

從文檔中,-Xss用於設置JVM的堆棧大小。但我對這個說法非常困惑。-Xss JVM選項實際上做了什麼

在Java中,每個線程都有自己的堆棧。通過是否-Xss指定的號碼:可以被所有的線程被用作堆棧的總內存

  1. ?例如如果-Xss設置爲256K,則所有線程將在此256K內存中創建自己的堆棧。

  2. 線程的每個堆棧的大小。例如如果-Xss設置爲256K,則每個線程將有一個256K大的堆棧。因此10個線程將完全使用2560K。

非常感謝。

編輯:

感謝您的回答。它看起來像是上面的(2)senario。 -Xss指定特定線程的最大堆棧大小。

然後我有一個後續問題:這些內存在哪裏分配?

我們可以使用-Xmx和-Xms指定保留的堆內存。將使用這些保留的內存分配堆棧嗎?或者它是直接從本地內存分配的?

+0

[This answer](http://stackoverflow.com/a/17167720/3788176)聲明同義詞是「-XX:ThreadStackSize」,這意味着它是每個線程。 –

+0

https://stackoverflow.com/questions/4967885/jvm-option-xss-what-does-it-do-exactly –

回答

6

這是每個線程的堆棧大小,報價this page on the java command

-Xss大小

將線程堆棧大小(以字節爲單位)...

所以這是你的第二部分題。不過,我不認爲總結所有線程堆棧大小通常是準確的。根據JVM實現的不同,實際的總堆棧大小可能不是2560K。注意JVM規範中的這個引用:

該規範允許Java虛擬機堆棧具有固定的大小或者根據計算的需要動態擴展和收縮。如果Java虛擬機堆棧的大小是固定的,則每個Java虛擬機堆棧的大小可以在創建堆棧時獨立選擇。

3

每個線程都有自己的堆棧。大多數JVM使用本地線程,並且這些堆棧使用本機虛擬內存。使用虛擬內存的優點是隻有觸摸的頁面變成了使用的內存。

這些內存在哪裏分配?

本地內存像C程序中的線程堆棧一樣。

我們可以使用-Xmx和-Xms指定保留的堆內存。將使用這些保留的內存分配堆棧嗎?

堆棧不使用堆所以,沒有。

或者它是從本地內存直接分配的?

是的。

相關問題