Java 我是否正确地阅读了这个top命令?

Java 我是否正确地阅读了这个top命令?,java,memory-management,shared-memory,Java,Memory Management,Shared Memory,我试图调试我的java进程消耗了多少内存。如果我错了,请纠正我 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 11798 root 20 0 17.354g 6.084g 164456 S 38.9 10.2 12:52.04 java 这就是过程。这就是我启动java应用程序的方式 '-server -Xmx10G -XX:+UseG1GC -XX:MaxGCPause

我试图调试我的java进程消耗了多少内存。如果我错了,请纠正我

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
11798 root      20   0 17.354g 6.084g 164456 S  38.9 10.2  12:52.04 java
这就是过程。这就是我启动java应用程序的方式

'-server -Xmx10G -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps'

正如您所看到的,我为该应用程序提供了10G的内存。但是根据top帮助页%MEM是实际内存使用的百分比。在这种情况下,我假设它只使用10%的10G

我问这个问题的原因是,如果它只使用1GB,我可能想将-Xmx减少到3GB,那么给它10G就有点过头了


我的问题是,我假设10%是该进程内存的实际使用率,那么我降低了-Xmx选项,以便其他进程可以获得更多内存,这对吗

不,%MEM列中的10.2%并不意味着它的JVM分配量的10.2%。“top”不知道您使用的JVM启动选项。“top”的手册页将%MEM定义为

“任务当前使用的可用物理内存共享。”


因此,它是总可用系统内存(物理而非虚拟)。

Xmx
是“最大限制”。它不是“分配这么多”,而是“分配不超过这么多”%MEM是实际使用的内存占系统内存总量的百分比。为什么不在JDK中使用Java VisualVM?