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

时间:2016-12-08 06:34:47

标签: java memory-management jvm operating-system

我是这个主题的新手,所以,如果我的问题显而易见,那就道歉了 - 这就是 - 每当我们启动一个Java应用程序时,就会创建一个新的JVM实例。 JVM本身是一个在操作系统上运行的进程,与任何其他进程一样,它有自己的内存需求 我知道堆和非堆内存结构以及它们如何配置和操作。我正在寻找的是jvm进程本身的内存细节, 如何划分整体内存,即jvm自己的内存需求+堆+非堆+本机堆栈
有几个细分市场?
操作系统分配给JVM的内存量以及jvm如何进一步使用它? 在运行应用程序时是否有任何命令或实用程序来检查这些详细信息? 我已经google了很多但没有找到任何具体的方向,几乎所有文章都解释了堆和非堆内存结构(eden / old / meta等)。我也访问了下面的链接 -
JVM Memory Types
How is the java memory pool divided?
JVM Memory segments allocation
https://blog.codecentric.de/en/2010/01/the-java-memory-architecture-1-act/
JVM memory mapping over a Linux Process
Understanding JVM Memory Allocation and Java Out of Memory: Heap Space
看来我被困在这里,关于这个主题的任何指针都会很棒,所以我可以开始朝这个方向看。

2 个答案:

答案 0 :(得分:5)

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)

更多信息herehere

答案 1 :(得分:1)

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

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

相关问题