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

标签 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: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 定义为

“任务当前使用的可用物理内存份额。”

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

关于java - 我是否正确阅读了这个顶级命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38382598/

相关文章:

Java 集合排序 BigDecimal

java - 解析 Java 源文件中的字符串文字以查找潜在的 SQL 注入(inject)

swift - 为什么对象只有从 NSObject 继承时才会变成 NSZombie?

c - 访问函数中的双指针结构

python - 转换为共享字符串数组的 Numpy 字符串矩阵会导致类型不匹配

java - Spring Data JPA 没有类型合格的 bean ... 找到依赖项

java - Stream、Map、Reduce……是怎么做到的?

c++ - 如何确定 C++ 应用程序中的可用 RAM 量?

c++ - 减少(op :var) has the same effect as shared(var)

c++ - 游戏消息传递系统的选项