'top'显示Java程序使用的内存比Java Profiler显示的更多

时间:2017-08-16 02:46:05

标签: java linux memory memory-leaks

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

Linux top command YourKit Java profiler

2 个答案:

答案 0 :(得分:4)

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

  • 它可能是内存映射文件。
  • 它可能是原生图书馆:不太可能......那么多的记忆。
  • 它可以是由本机库分配的内存(例如,使用malloc)。
  • 可能是大量的Java线程,或者是具有大量线程堆栈的线程。
  • 可能是别的......

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

(理论上它是由于-Xms可能是错误的。如果JVM预先分配了一个巨大的初始堆并且没有使用它,你就不会期望那么多" RES&#34 ;内存。可以想象堆已经变得非常大并且已经缩小了,但是JVM还没有给回操作系统的空间。但AFAIK JVM发布当它缩小堆时,内存回到OS 。)

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

答案 1 :(得分:0)

您的总内存是结果堆,PermSize和Stack大小。

Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]

除此JVM之外,还需要一些空间才能平稳运行。说明here in deatil