Java JVM作为进程的内存细节

Java JVM作为进程的内存细节,java,memory-management,jvm,operating-system,Java,Memory Management,Jvm,Operating System,我不熟悉这个主题,因此,如果我的问题很明显,我很抱歉,但这里是-每当我们启动Java应用程序时,都会创建一个新的JVM实例。JVM本身是一个运行在操作系统上的进程,与任何其他进程一样,它有自己的内存需求。 我知道堆和非堆内存结构以及如何配置和操作它们。我要寻找的是jvm进程本身的内存细节, 整个内存的划分方式即jvm自身的内存需求+堆+非堆+本机堆栈 有多少段操作系统为JVM分配了多少内存,JVM如何进一步使用这些内存? 运行应用程序时是否有任何命令或实用程序来检查这些详细信息? 我在谷歌上搜索

我不熟悉这个主题,因此,如果我的问题很明显,我很抱歉,但这里是-
每当我们启动Java应用程序时,都会创建一个新的JVM实例。JVM本身是一个运行在操作系统上的进程,与任何其他进程一样,它有自己的内存需求。
我知道堆和非堆内存结构以及如何配置和操作它们。我要寻找的是jvm进程本身的内存细节, 整个内存的划分方式即jvm自身的内存需求+堆+非堆+本机堆栈
有多少段
操作系统为JVM分配了多少内存,JVM如何进一步使用这些内存?
运行应用程序时是否有任何命令或实用程序来检查这些详细信息?
我在谷歌上搜索了很多,但没有找到这方面的具体内容,几乎所有的文章都解释了堆和非堆内存结构(eden/old/meta等)。我还访问了以下链接-







似乎我被困在这里了,任何关于这个主题的指针都会很好,这样我就可以开始朝那个方向看了。

如果您正在寻找命令行实用程序,请从只打印所有正在运行的java进程的PID的
jps
开始。然后选择一个您想要发现的,并将其与PID一起使用
jmap

JDK也带来了可视化工具。旧的
JConsoke
和更新更好的
VisualVM

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

使用选项运行Java
-XX:NativeMemoryTracking=summary

然后在运行时执行以下命令以打印JVM内存统计信息:

jcmd <pid> VM.native_memory summary

更多信息和信息。

我使用了Jconsole和Visual VM。刚找到这篇文章,我看起来像这样,如果操作系统将X内存作为一个进程分配给JVM,那么在X之外,JVM将根据-Xms/-Xmx/-XX:PermSize,MaxPermSize,假设剩余内存是(X1=X-heap-perm)。现在X1会发生什么,JVM需要多少内存来存储X1之外的内容,有多少内存被分配到其他段?正如这篇文章所解释的,几乎没有其他部分也正是我所寻找的。
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)