'top' 显示 Java 程序使用的内存比 Java 分析器显示的多

Eli*_*337 2 java linux memory memory-leaks

当 Linux top 命令显示 Java 进程使用 14GB 内存而 Java 分析显示仅使用 2GB 内存时,可能的原因是什么?

Linux 顶部命令 YourKit Java 分析器

Ste*_*n C 5

这意味着您的 JVM/Java 应用程序正在使用堆外内存。很多。

  • 它可能是内存映射文件。
  • 它可能是本机库:不太可能......对于那么多内存。
  • 它可能是本机库分配的内存(例如使用malloc)。
  • 它可能是大量的 Java 线程,也可能是具有巨大线程堆栈的线程。
  • 它可能是别的东西......

这可能是某种内存泄漏,但不是堆对象的内存泄漏。

(说是-Xms的说法可能是错误的。如果JVM预先分配了一个巨大的初始堆而没有使用它,你就不会期望那么多“RES”内存。可以想象,堆真的得到了大并且缩小了大小,但是 JVM 还没有(还)将空间返还给操作系统。但是 AFAIK JVM缩小堆大小将内存释放回操作系统。)

如果您要深入了解这一点,您需要了解您的应用程序及其库依赖项在做什么。