Java程序消耗大量内存(增长了Xmx的1.5倍)

标签 java jvm aix heap-dump

我有一个java程序(在内存中执行大量操作)。我已经为进程分配了 10GB java 堆(-Xmx)。系统总内存为30GB。 Java 程序实际上占用了近 24 GB 内存(我可以从 svmon 输出中看到)。 Java 堆利用率低于 10 GB(来自详细 GC)。我想知道剩余内存(24-10 = 14 GB 内存)的用途是什么?是 native 堆吗? (我没有任何 JNI 代码或任何其他可以使用 JNI 代码的第三方库)。您能告诉我如何监控 native 内存使用情况吗?

操作系统:AIX

Java:IBM JVM 1.6

CPU:Power 7 SMT -4

最佳答案

另一种类型的内存是非堆内存。尝试使用 JConsole 监控情况.

在此page about YourKit我读到:

The abnormal growth of non-heap memory size may indicate a potential problem, in this case you may check up the following:

  • 是否存在类加载问题,例如加载器泄漏。在这种情况下,可以借助类加载器 View 来解决问题。
  • 是否有字符串被大规模拦​​截。为了检测此类问题,可以使用分配记录。

关于Java程序消耗大量内存(增长了Xmx的1.5倍),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8009297/

相关文章:

c - AIX loadquery() 返回值解释(也是 64 位模式下的 SEGV)

linux - 如何在 Linux 中为内存映射文件提供写时扩展功能?

java - dom4J:如何获取节点元素的值?

java - 添加 Play Services 依赖项会导致与 Firebase 发生冲突

java - 如何增加 JVM 堆大小

c - 在 AIX 上使用 gcc 编译 c 时出错

java - 关于java类嵌套的一个疑问

java - 从命令行获取输入并将其传递给方法

java - Java内存模型中堆的实现

java - 如何在 groovy 中列出 JVM 中的所有(groovy)类