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

标签 java linux memory memory-leaks

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

Linux top command YourKit Java profiler

最佳答案

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

  • 它可能是内存映射文件。
  • 它可能是本地库:不太可能……因为那么多内存。
  • 它可能是由本地库分配的内存(例如使用malloc)。
  • 它可能是大量的 Java 线程,或者具有巨大线程堆栈的线程。
  • 也可能是别的……

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

(这是由于 -Xms 引起的理论可能是错误的。如果 JVM 预分配了一个巨大的初始堆并且没有使用它,您就不会期望那么多的“RES”内存。这是可以想象的 堆已经变得非常大并且已经缩小,但是 JVM 还没有(还)将空间还给操作系统。但是据我所知,JVM 将内存释放回操作系统 它缩小了堆的大小。)

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

关于java - 'top' 显示 Java 程序使用的内存比 Java 分析器显示的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45704340/

相关文章:

c++ - std::map 中的对象指针在通过 getter 检索时损坏

java - 获取当前用户位置

linux - 有没有办法使用 netlink 在两个用户空间进程之间进行进程间通信 (IPC)?

java - Dagger 2 - 如果没有 @Provides 注释的方法则无法提供

java - 如何制作一个接受任意命令的守护进程

php - 如何通过 Mac 的终端将公共(public) ssh key 添加到我的 DigitalOcean Droplet?

c - 如何检查内存区域是否映射到文件?

memory - Elasticsearch 数据二进制文件内存不足

java 并从 .txt 文件中读取

java - 从错误的 xsl 格式文档中获取属性值