我有一个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/