2016-09-29 113 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