我们Java开发人员有时会使用java -Xss 1M
来确保为每个特定于线程的堆栈提供1 MB的空间。现在,我经常感到困惑,JVM从堆或系统内存中借用了1 MB,或者是否有任何特定的内存Java为线程分配。你能帮我理解一下吗?
另外,我们是否有一个可视(插件)运行时工具以可理解的方式显示堆和堆栈的内容?
提前致谢。
答案 0 :(得分:1)
哪里JVM从堆或系统内存中借用了1 MB?
JVM从操作系统“借用”堆栈内存,所以这可能就是你所谓的“系统内存”。 JVM实际上从OS的虚拟内存系统请求它用作线程堆栈空间的内存块。 JVM使用的所有内存(代码,堆栈,堆等)都以相同的方式从OS请求。堆栈内存与堆内存是分开的,由JVM本身管理。
有关如何划分JVM内存的更多信息,我会查看以下答案:How is the java memory pool divided?
另外,我们是否有一个可视(插件)运行时工具以可理解的方式显示堆和堆栈的内容?
如果您正在讨论堆内存的内容,那么您应该查找有关内存分析器的信息。这是一个很好的question about that topic。这也是good tutorial on the subject。但是,我不确定这些工具会以“可理解的方式”向您展示内存。它们用于查找内存泄漏或一般对象分配带宽问题。
没有显示堆栈内存的工具,因为它是根据各种线程的调用堆栈进行分配的,并且没有以易于调查的方式进行组织。
最后,为了概述JVM的各个部分正在使用多少内存,您可以use jconsole as well。