我是否正确阅读了这个顶级命令?

Am I reading this top command correctly?

我正在尝试调试我的 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 内存。但根据顶部帮助页面 %MEM 是实际内存使用的百分比。在这种情况下,我假设它只使用了 10G 的 10%?

我问这个的原因是,如果它只使用 1GB,我可能想将 -Xmx 减少到 3GB,然后给它 10G 会有点矫枉过正。

我的问题是,我假设 10% 是该进程内存的实际使用情况是否正确,因此我降低了 -Xmx 选项以便其他进程可以获得更多内存。

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

"A task's currently used share of available physical memory."

所以它是总可用系统内存(物理而非虚拟)。