JVM作为过程的内存详细信息



我是这个主题的新手,因此,如果我的问题很明显,则很抱歉,但是每当我们启动Java应用程序时,就会创建JVM的新实例。JVM本身是一个在OS上运行的过程,并且像其他任何过程一样,它具有其自身的内存要求。
我知道堆和非主内存结构以及如何配置和操纵它们。我正在寻找的是JVM过程本身的内存细节,如何将整体内存分配即JVM自己的内存需求 heap heap non-Heap 本机堆栈
有几个部分?
将多少内存OS分配给JVM,JVM如何进一步使用?
在运行应用程序时是否有任何命令或实用程序可以检查这些详细信息?
我已经谷歌搜索了很多东西,但没有在这个方向上找到任何具体的东西,几乎所有地方的文章都解释了堆和非岩石记忆结构(伊甸园/旧/元/元等)。我还访问了下面的链接 -
JVM内存类型
Java内存池如何分配?
JVM内存段分配
https://blog.codecentric.de/en/2010/01/the-java-memory-architecture-1-act/
JVM内存映射在Linux过程
了解JVM内存分配和java脱离存储器:堆空间
看来我被困在这里,关于这个主题的任何指针都很棒,以便我可以开始朝那个方向寻找。

Java 8的本机内存跟踪(NMT)功能有助于回答您的问题。

使用选项-XX:NativeMemoryTracking=summary运行Java
然后在运行时执行以下命令以打印JVM内存统计信息:

jcmd <pid> VM.native_memory summary

输出看起来像:

Total:  reserved=664192KB,  committed=253120KB
-                 Java Heap (reserved=516096KB, committed=204800KB)
                            (mmap: reserved=516096KB, committed=204800KB)
-                     Class (reserved=6568KB, committed=4140KB)
                            (classes #665)
                            (malloc=424KB, #1000)
                            (mmap: reserved=6144KB, committed=3716KB)
-                    Thread (reserved=6868KB, committed=6868KB)
                            (thread #15)
                            (stack: reserved=6780KB, committed=6780KB)
                            (malloc=27KB, #66)
                            (arena=61KB, #30)
-                      Code (reserved=102414KB, committed=6314KB)
                            (malloc=2574KB, #74316)
                            (mmap: reserved=99840KB, committed=3740KB)
-                        GC (reserved=26154KB, committed=24938KB)
                            (malloc=486KB, #110)
                            (mmap: reserved=25668KB, committed=24452KB)
-                  Compiler (reserved=106KB, committed=106KB)
                            (malloc=7KB, #90)
                            (arena=99KB, #3)
-                  Internal (reserved=586KB, committed=554KB)
                            (malloc=554KB, #1677)
                            (mmap: reserved=32KB, committed=0KB)
-                    Symbol (reserved=906KB, committed=906KB)
                            (malloc=514KB, #2736)
                            (arena=392KB, #1)
-           Memory Tracking (reserved=3184KB, committed=3184KB)
                            (malloc=3184KB, #300)
-        Pooled Free Chunks (reserved=1276KB, committed=1276KB)
                            (malloc=1276KB)
-                   Unknown (reserved=33KB, committed=33KB)
                            (arena=33KB, #1)

更多信息在这里和这里。

如果您正在寻找命令行实用程序,则从jps开始,只需打印所有运行的Java进程的PID即可。然后选择您想发现并使用其PID的jmap的一种。

JDK也带有视觉工具。旧的JConsoke和更新的,更好的VisualVM

最新更新