Linux top 与 java 使用的内存不相符

Linux top 与 java 使用的内存不相符

我们有一个 Java 应用程序,在代码的最后部分我们写了这些行

Runtime runtime = Runtime.getRuntime();
long memory = runtime.totalMemory() - runtime.freeMemory();
System.out.println("\n\nUsed memory is bytes: " + memory);

我们注意到,随着时间的推移,应用程序的内存(%)列顶部显示增加,但 Java 内存(来自运行时变量)值显示上下波动?那么我们应该遵循哪一个来决定确切的内存使用情况?我的目的是确定我的应用程序中是否存在内存泄漏?

答案1

JVM 启动时会从操作系统占用一些内存。这就是您在 ps 和 top 等工具中看到的内存量。

然后您的应用程序开始使用这块内存:这就是您在代码和 jstat 等工具中看到的内存。

因此,如果您想调试应用程序内的内存泄漏,您不会想使用 top 或 ps。

相关内容