2016-09-29 154 views
0

我們的Java開發人員有時會使用java -Xss 1M確保我們提供了1 MB空間,每個堆棧這是特別的線程。現在,我經常會對JVM從堆或系統內存中借用1 MB的內容感到困惑,或者是否有任何Java爲線程分配的特定內存。你能幫我理解這一點嗎?JVM堆棧存儲器

同時,我們是否有一個視覺(插件)運行時工具,它顯示了在理解的方式堆和棧的內容是什麼?

在此先感謝。

+0

你如何確定你需要每個線程正好1MB堆棧大小? – Holger

回答

1

其中JVM借從1 MB從堆或系統存儲器?

JVM從操作系統「借用」堆棧內存,所以也許這就是你所說的「系統內存」。 JVM實際上向操作系統的虛擬內存系統發出請求,使用它作爲線程堆棧空間使用的內存塊。所有的JVM使用的內存(代碼,堆棧,堆等)都以相同的方式從操作系統請求。堆棧內存與由JVM本身管理的堆內存是分開的。

有關JVM的內存是如何劃分的,我想看看這個答案的詳細信息:How is the java memory pool divided?

同時,我們是否有一個視覺(插件)運行時工具,可以顯示內容堆和堆棧以可理解的方式?

如果您在談論堆內存的內容,那麼您應該查找關於內存分析器的信息。這是一個很好的question about that topic。這也是一個good tutorial on the subject。但是,我不確定這些工具會以「可理解的方式」向您顯示內存。它們用於定位內存泄漏或一般對象分配帶寬問題。

沒有工具顯示堆棧內存,因爲它是基於各個線程的調用堆棧分配的,並沒有以易於調查的方式組織。

最後,對於多少內存被使用的JVM,你可以use jconsole as well的各部分的概述。

+1

JVisualVM的特性也包含在jdk中,它是jconsole的超集。特別是使用VisualGC插件,它提供了堆內存的絕佳視圖... – Holger

+0

謝謝。實際上,jconsole提供了JVisualVM @Holger上沒有的內存選項卡上的一些其他細節。 – Gray